特征工程 & word2vector & L1 L2 正则 & (Batch) Normalization

数据和特征,往往决定了结果的上限;

而算法和优化通常是为了接近这个上限。

0x01 归一化 Normalization

无量纲 : 无物理单位 (比如比值等)

适合: 线性回归,逻辑回归LR,SVM, BP神经网络

不适合:决策树类(信息增益比 与是否归一化无关)

1-1 归一化

  1. 等比缩放 ${x^{’} =\frac{x-min(x)}{x_{max}-x_{min}},x\in[0,1]}$

  2. 均值归一化 mean normalization $x^{’} =\frac{x-mean(x)}{x_{max}-x_{min}}, x\in[-1,1]$

  3. 缩放到单位长度 scaling to unit length $x^{’} =\frac{x}{||x||}$ , $||x||$是欧几里得长度

  4. 零均值归一化(标准化

    • 映射到均值为0,标准差为1的分布上。 均值μ,标准差σ:

    • 标准差的存在也是为了消除量纲影响,方差的量纲与数据的量纲不一致。具体概率分布等详细知识可以参考我之后的文章 概率统计中的相应部分。

    • image-20210210171044043

  • 为什么要归一化
    • 同样学习率的情况下,在各特征维度上的梯度更新更加一致,能够更快的收敛。使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确。
    • 比如LR, BP神经网络等
  • 其他数据缩放方式:cnblogs: 数据预处理方法

1-2 标准化

归一化是标准化的方法之一

一般将零均值归一化称为标准化。

1-3 Batch Normalization

  • 《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
  • BN work的根本原因,是因为在网络的训练阶段,其能够让优化空间(optimization landscape)变的平滑
  • Batch Normalization位于激活函数之前,这样就可以使数据的分布更加适合非线性激活,避免落入激活函数不敏感区域,即梯度消失的问题。
  • BN可以防止梯度爆炸或弥散、可以提高训练时模型对于不同超参(学习率、初始化)的鲁棒性、可以让大部分的激活函数能够远离其饱和区域
  • image-20210210211738825论文
  • 对于没有BN的神经网络,其loss函数是不仅非凸,并且还有很多flat regions、sharp minimal。这就使得那些基于梯度的优化方法变得不稳定,因为很容易出现过大或者过小的梯度值。观察上图,可以发现,在使用了BN后,loss的变化变得更加稳定,不会出现过大的跳动;同样,梯度也变得更加平滑。

0x02 编码与处理

编码

  • 按一定顺序序号编码,一定程度可以保留大小信息。
  • One-Hot 独热编码,很熟悉了,但有问题要注意
    • 需要整理节省存储空间,利用稀疏性,使用稀疏向量节省空间。
    • 需要降维
      • KNN等高维空间下距离不好测算
      • LR等回过拟合
      • 不是所有维度都是有效的,只有部分维度也就是部分特征是有效的。
  • 编码,节省空间
  • hash trick等

组合特征与降维

  • 矩阵分解
    • (m, n) = (m, k) x (k, n)
    • 形象上类似于encoder-decoder word2vector
  • LDA
  • T-SNE
    • 相对熵 KL散度
    • image-20210210194141941
  • 详见之后文章 降维算法

文本特征

0x03 Word2Vector 【!】

3-1 CBOW与Skip-gram

image-20210210194858880

看图Word2Vector的原理就已经很好理解了,

需要注意的是,Word2Vector采用权重共享的方式,

其中CBOW方式的输入层参数权重共享很好理解,求和而已;

Skip-gram采用的则是TOP-K的方式,输出最高的top-k个预测结果来表示上下文;

因为Word2Vector的上下文是词袋类型,是无序的。

3-2 优化softmax

需要注意的是,以下两种方法,优化的是softmax这个输出过程,而不是softmax本身,这两种方法都与softmax无关。

3-2-1. 层次softmax

使用了树形结构,非叶节点相当于一个神经元(sigmoid),起分类作用;

每个叶子节点代表语料库中的一个词语,于是每个词语都可以被01唯一地编码,并且其编码序列对应一个事件序列;

而树则选择了哈夫曼树,因为Huffman编码中词频越高的词语对应的编码越短,特别适合word2vec的训练

哈夫曼树很简单。每次从许多节点中,选择权值最小的两个合并,根节点为合并值;依次循环,直到只剩一棵树。

label会编程哈夫曼编码,

训练阶段不需要所有叶节点都输出,所以训练阶段平均只需要logN个节点即可,

预测阶段则需要所有节点。

sigmoid:

softmax 又称归一化指数函数:

Sigmoid 输出结果是伯努利分布image-20210210211448210

而Softmax输出的是多项分布 image-20210210211505585

同样都是二分类的情况下,两者时等价的,

有人说sigmoid会输出两个值,但是这两个值只是两次结果而已,不具有可加性,而且,应该是网络的设计问题,sigmoid的全连接只需要(n,1)即可,那就只有一个值了,而softmax需要(n, 2),输出两个值。

image-20210210211024273

image-20210210203237428

各叶子节点概率值相加为1:

image-20210210203334037

P.S. 一般二分类模型做多分类的话都会采用树形结构,比如SVM多分类器就是树形结构,image-20210210195756499

3-2-2. 负采样

Negative Sampling简称NEG, 目的是用来提高训练速度和改善所得词向量的质量

NEG不使用复杂的哈夫曼树,而是使用随机负采样,大幅度提高性能

NCE 细节有点复杂,本质上是利用已知的概率密度函数来估计未知的概率密度函数。简单来说,如果已知概率密度X,未知Y,如果知道X和Y的关系,Y也就求出来了。

在训练的时候,需要给正例和负例。Hierarchical Softmax是把负例放在二叉树的根节点上,而NEG,是随机挑选一些负例。

负采样的本质:每次让一个训练样本只更新部分权重,其他权重全部固定;减少计算量;(一定程度上还可以增加随机性)

样本少了,逻辑回归,似然函数,随机梯度上升

0x04 L1范数,L2范数 【!】

范数 通用公式:

L0范数:image-20210210162510433

  • 表示向量中所有非零元素的个数,其非常适合机器学习中稀疏编码

L1范数(稀疏):

  • L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。L1范数和L0范数可以实现稀疏,L1因具有比L0更好的优化求解特性而被广泛应用。

L2范数(平滑,非稀疏)

  • 欧几里得距离

图4-1

​ 图4-1

L1 和 L2 范数在机器学习上最主要的应用大概分下面两类

  • 作为损失函数使用
  • 作为正则项使用也即所谓 L1-regularizationL2-regularization

4-1 损失函数

L1:image-20210210174722927 least absolute deviation (LAD,最小绝对偏差)

绝对值阻碍计算,但鲁棒性 (Robust) 更强,对异常值不敏感

L2: $ S = \sum_{i=1}^{n}(y_{i} - f(x_{i}))^2$ 最小二乘误差 (least squares error, LSE)

求导、解方程等容易计算,比较常用

另外,L2 一定只有一条最好的预测线,L1 则因为其性质可能存在多个最优解(图4-1即可解释)

详细参考资料

4-2 正则 L1-regularizationL2-regularization

image-20210210175747529

先说特点优缺点

  • 如上面提到的,L2 计算起来更方便,而 L1 在特别是非稀疏向量上的计算效率就很低;
  • L2 有唯一解,而 L1 不是;
  • L1 最重要的一个特点,输出稀疏,会把不重要的特征直接置零,而 L2 则不会;
  • L1 天然的输出稀疏性,把不重要的特征都置为 0,所以L1也是一个天然的特征选择器

4-3 L1 稀疏性 (画图 和 导数 两钟方式进行解释)

4-3-1 导数

image-20210210192405307

能看出来,w越接近0时,L1始终为正负1,而L2则越来越小,一直是一个趋势。这也是为什么L1输出容易稀疏,L2很难稀疏的原因。

image-20210210192528634

在梯度更新时,不管 L1 的大小是多少(只要不是0)梯度都是1或者-1,所以每次更新时,它都是稳步向0前进。

image-20210210192612755

而看 L2 的话,就会发现它的梯度会越靠近0,就变得越小。

image-20210210192628317

也就是说加了 L1 正则的话基本上经过一定步数后很可能变为0,而 L2 几乎不可能,因为在值小的时候其梯度也会变小。于是也就造成了 L1 输出稀疏的特性。

4-3-2 画图

图像上也能类似于上边看出来,

L1一般相切与坐标轴,也就是有一维为0的点,也就是稀疏;

而L2两个坐标都很难为0,所以不稀疏,也就是平滑。

image-20210210182026684

0x05 其他思考

5-1 图嵌入(Graph embedding)

知乎:图嵌入(Graph embedding)- 简介

知乎:为什么要进行图嵌入(Graph embedding)?

5-2 LDA与word2vector

关键点在于似然函数不同

LDA是概率图生成模型,似然函数是概率乘积;

w2v似然函数则是与神经网络输出有关,loss的反向传播,也就是深度学习常用的交叉熵。

5-3 似然函数 交叉熵

异曲同工

在之后的文章在讲吧,还有T-SNE的相对熵之类的

参考文献

  1. 什么是批标准化 (Batch Normalization)
  2. Word2vec之数学模型
  3. l1正则与l2正则的特点是什么,各有什么优势?Andy Yang的回答
  4. 层次softmax (hierarchical softmax)理解
  5. Youtube: Q&A - Hierarchical Softmax in word2vec - ChrisMcCormickAI
  6. word2vec原理(三) 基于Negative Sampling的模型