看了一眼这个文章系列,居然第四集是11月5号写的,这25天可见发生了多少事情...

      今天我们讲讲特征,算是基础篇的一个番外篇延伸,我省着在后面的文章里写了,怕扰乱了思路

      严格来说这个属于基础机器学习领域里的了,我又不讲决策树,贝叶斯,隐马尔可夫啥的(不在这个系列写,也许在别的算法系列文章里写),但是特征这玩意也都是通用的了,不讲后面还是麻烦

       进入正题

       那机器学习也好,深度学习也好,能解决哪些问题:

1- 规律性

2-平滑性

3-结果不变性(客观)

      如果你老板给你的任务不完全的match以上三种要求的任务,那必须跑,否则必然是一个大坑

      比如彩票预测人物这种搭眼一看,第一个就不符合;或者让你识别质数,这个也不行,除非硬算,否则因为质数是突变的,他不符合平滑性

       另外比如量化,虽然它符合以上三种形态,但是模型权重必须得一直变,否则大家用多了就驱同了,所有人都一起亏钱

深度学习从入门到不想放弃-5_深度学习

,所以量化模型不变的投资机构一定要拉黑

深度学习从入门到不想放弃-5_机器学习_02

,权重模型的变化,取决于特征的变化和学习

      特征足够多,随机就变确定,特征太少,那么确定就会变随机

      某些自然属性就适合当特征,比如身高180,体重150这就是标准的天然向量化了

      另外也可以人为设计特征,比如提取一个图片的特征,拿柳岩举例

深度学习从入门到不想放弃-5_深度学习_03

      天然图片的长和宽就形成了400*400的一个矩阵,然后每个像素点描述一个RGB的三个颜色的强度,这就是一个天然的Tensor了

      而如果是图像识别的话,其实颜色对你的图片识别没什么影响,就可以把RGB的维度换成一个0-255的灰度,减少计算量和节约显存,这样的操作,就叫做特征压缩

      而我们现在比较关心的LLM,以文字编码来表示特征,最早其实One-hot,举个例子:

      对中文文本进行编码,中文常见词有10W个,如果用One-hot编码(属于hot编码系列,就拿他来举例)的话,你实际上就编码了10万个0的向量,相应的位置取1代表不同的含义

我[1,0,0...]

爱[0,1,0...]

你[0,0,1...]

......

      这种就是典型的Sparse稀疏编码方式,造成了空间和计算的浪费,所有后面的编码也都在这做了改进,变为了dense编码的模式,比如我们常用的text-embedding

      hot编码系列还有一个更大的问题,就是所有词之间都看不出来什么差异,因为以上一个例子来讲,10万个编码,任何词之间都是只有2位不同,但是词是有语义的

      比如用hot编码:

  •       我借你钱和你借我钱,这个完全相反的句子,机器处理起来,语义确是一致的(后面讲距离)
  •       而电脑和计算机这样的语义相近的词做判断却容易被理解为语义很远的词


再拿两个实际的电商"搜广推"例子来说

       比如让你设计性别特征,男[1],女[0],这种特征是不是很dense,也很容易区分,看起来是很简单又很高效。但是这个特征设计有个致命的弱点,就是数值的差异,会导致你模型训练完毕后,推理时,会更偏重于男性的用户(1>0),所以更合理的特征设计是男[1,0],女[0,1]

       再比如,如果拿电商用户的年龄做特征,是否合理呢,可以根据不同的年龄来当成一个特征,用这个特征训练模型,在推理阶段,会给相应年龄的客户,推送符合年龄的商品

      这个看起来似乎是合理,但是在实际场景中这么做,你的"搜广推"系统基本就废了,因为在消费场景里,年龄其实不能作为直接的特征来进行判断,就好比 一个32岁的男性,他不能等于(20岁男性+42岁男性)/2的消费能力

       那么在实际的场景中,设计特征更偏向于用有限的hot编码来表示区间:

  • 小孩[1,0,0,0], 0<age<18
  • 青年[0,1,0,0], 18<age<40
  • 中年[0,0,1,0], 40<age<60
  • 老年[0,0,0,1],60<age<+∞

       所以综上所述,编码也没有什么好坏,完全看你业务需求

 希望看完我这期,大家都能读懂苏剑林大师的RoPE编码

深度学习从入门到不想放弃-5_权重_04

     下一期该讲距离了,我估计,后面也没啥要特意提的基础概念了吧