数据和特征,往往决定了结果的上限;
而算法和优化通常是为了接近这个上限。
0x01 归一化 Normalization
无量纲 : 无物理单位 (比如比值等)
适合: 线性回归,逻辑回归LR,SVM, BP神经网络
不适合:决策树类(信息增益比 与是否归一化无关)
1-1 归一化
等比缩放 ${x^{’} =\frac{x-min(x)}{x{max}-x{min}},x\in[0,1]}$
均值归一化 mean normalization $x^{’} =\frac{x-mean(x)}{x{max}-x{min}}, x\in[-1,1]$
缩放到单位长度 scaling to unit length $x^{’} =\frac{x}{||x||}$ , $||x||$是欧几里得长度
- L2范数(平滑,非稀疏):$\left | x \right |{2} = \sqrt{\sum{i=1}^{n}\left | x{i} \right |^2} = \sqrt{x{1}^2+x{2}^2+…+x{n}^2}$
- 欧几里得距离
- 本文第四部分 (L1范数,L2范数) 将详细介绍
- L2范数(平滑,非稀疏):$\left | x \right |{2} = \sqrt{\sum{i=1}^{n}\left | x{i} \right |^2} = \sqrt{x{1}^2+x{2}^2+…+x{n}^2}$
零均值归一化(标准化)
映射到均值为0,标准差为1的分布上。 均值μ,标准差σ:
标准差的存在也是为了消除量纲影响,方差的量纲与数据的量纲不一致。具体概率分布等详细知识可以参考我之后的文章 概率统计中的相应部分。
- 为什么要归一化
- 同样学习率的情况下,在各特征维度上的梯度更新更加一致,能够更快的收敛。使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确。
- 比如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可以防止梯度爆炸或弥散、可以提高训练时模型对于不同超参(学习率、初始化)的鲁棒性、可以让大部分的激活函数能够远离其饱和区域。
- 论文
- 对于没有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散度
- 详见之后文章 降维算法
文本特征
0x03 Word2Vector 【!】
3-1 CBOW与Skip-gram
看图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 输出结果是伯努利分布
而Softmax输出的是多项分布
同样都是二分类的情况下,两者时等价的,
有人说sigmoid会输出两个值,但是这两个值只是两次结果而已,不具有可加性,而且,应该是网络的设计问题,sigmoid的全连接只需要(n,1)即可,那就只有一个值了,而softmax需要(n, 2),输出两个值。
各叶子节点概率值相加为1:
P.S. 一般二分类模型做多分类的话都会采用树形结构,比如SVM多分类器就是树形结构,
3-2-2. 负采样
Negative Sampling简称NEG, 目的是用来提高训练速度和改善所得词向量的质量
NEG不使用复杂的哈夫曼树,而是使用随机负采样,大幅度提高性能
NCE 细节有点复杂,本质上是利用已知的概率密度函数来估计未知的概率密度函数。简单来说,如果已知概率密度X,未知Y,如果知道X和Y的关系,Y也就求出来了。
在训练的时候,需要给正例和负例。Hierarchical Softmax是把负例放在二叉树的根节点上,而NEG,是随机挑选一些负例。
负采样的本质:每次让一个训练样本只更新部分权重,其他权重全部固定;减少计算量;(一定程度上还可以增加随机性)
样本少了,逻辑回归,似然函数,随机梯度上升
0x04 L1范数,L2范数 【!】
范数 通用公式:
L0范数:
- 表示向量中所有非零元素的个数,其非常适合机器学习中稀疏编码
L1范数(稀疏):
- L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。L1范数和L0范数可以实现稀疏,L1因具有比L0更好的优化求解特性而被广泛应用。
L2范数(平滑,非稀疏)
- 欧几里得距离
图4-1
L1 和 L2 范数在机器学习上最主要的应用大概分下面两类
- 作为损失函数使用
- 作为正则项使用也即所谓 L1-regularization 和 L2-regularization
4-1 损失函数
L1: 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-regularization 和 L2-regularization
先说特点和优缺点:
- 如上面提到的,L2 计算起来更方便,而 L1 在特别是非稀疏向量上的计算效率就很低;
- L2 有唯一解,而 L1 不是;
- L1 最重要的一个特点,输出稀疏,会把不重要的特征直接置零,而 L2 则不会;
- L1 天然的输出稀疏性,把不重要的特征都置为 0,所以L1也是一个天然的特征选择器。
4-3 L1 稀疏性 (画图 和 导数 两钟方式进行解释)
4-3-1 导数
能看出来,w越接近0时,L1始终为正负1,而L2则越来越小,一直是一个趋势。这也是为什么L1输出容易稀疏,L2很难稀疏的原因。
在梯度更新时,不管 L1 的大小是多少(只要不是0)梯度都是1或者-1,所以每次更新时,它都是稳步向0前进。
而看 L2 的话,就会发现它的梯度会越靠近0,就变得越小。
也就是说加了 L1 正则的话基本上经过一定步数后很可能变为0,而 L2 几乎不可能,因为在值小的时候其梯度也会变小。于是也就造成了 L1 输出稀疏的特性。
4-3-2 画图
图像上也能类似于上边看出来,
L1一般相切与坐标轴,也就是有一维为0的点,也就是稀疏;
而L2两个坐标都很难为0,所以不稀疏,也就是平滑。
0x05 其他思考
5-1 图嵌入(Graph embedding)
知乎:为什么要进行图嵌入(Graph embedding)?
5-2 LDA与word2vector
关键点在于似然函数不同
LDA是概率图生成模型,似然函数是概率乘积;
w2v似然函数则是与神经网络输出有关,loss的反向传播,也就是深度学习常用的交叉熵。
5-3 似然函数 交叉熵
异曲同工
在之后的文章在讲吧,还有T-SNE的相对熵之类的