深度学习笔记
1. 线性分类
线性分类有两个主要部分:评分函数和损失函数。评分函数将输入的训练采样数据映射为分类标签的评估得分,损失函数量化评估得分与实际分类标签的差异。线性分类的学习过程即更新评分函数的参数来最小化损失函数的输出。
1.1. 评分函数
令训练集为 X,采样的数量为 N,单个采样为 (x, y),采用数据 x 为一个长度为 D 的列向量,分类标签 y 为一个长度为 L 的列向量:
评分函数为:
其中,评估得分
s 为为一个长度为 L 的向量,权重 W 为一个 L * D 的矩阵,偏移向量 b 为一个长度为 L 的向量。
y 中的每一个分量对应一个分类标签,当然这是事前已知的输入值。在学习的过程中,通过对 s 与 y 之间差异的处理,评分函数的参数 W 与 b 会不断的优化更新。
1.2. 损失函数
多类支持向量机损失 (Multiclass Support Vector Machine Loss)
其中,
j 为每个采样中 y 的每个下标,r 为 y 中最大(最正确)分量的下标,Δ 与 λ 为常数。公式后半部分为权重矩阵中每个分量的平方和,称为正则化损失 (Regularization Loss)
Softmax / 交叉熵损失 (Cross-entropy Loss)
其中,
m 为 s 中最大分量的下标。加号右边为 L2正则化,抑制过拟合。
1.3. 梯度下降
梯度是多维函数的各维度偏导数组成的矢量:
梯度的矢量方向的反方向为取值下降最快(最陡峭)的方向,因此其迭代的方向应该为梯度的反方向,不过,并未指明前进的步长(学习率)。
1.4. 反向传播
偏微分的链式法则:
将一个函数视为多个操作(门)的连接。当函数的输入流过每个门,即正向传播完成时,每个门的输入和输出确定。从最后输出的门开始,只要每个门均可偏导,则每个门均能求出自己的输出对于自己的输入的所有偏导数。再使用链式法则,则每一级均能求出最终的输出对于自己的输入的所有偏导数,只要下一级将偏导数传给自己,这就是所谓的反向传播。
将评分函数与损失函数合成为一个损失标量 l 关于参数 W, b 中各个分量的函数,将此函数分解为多个操作,通过反向传播得到 l 关于 W, b 中各个分量的偏导数,再通过梯度下降来更新所有参数。
2. 神经元仿生学
大脑的基本计算单位是神经元,从树突获取输入信号,由唯一的轴突产生输出信号,轴突在末端分叉,连接其他神经元的树突。
2.1. 神经元的仿生学建模
其中,
x 为单个神经元从多个上游神经元收到的标量信号组成的列向量,w 为连接多个上游神经元的树突的接收增益组成的列向量,+ b 为信号在神经元中的处理,激活函数 fa 代表轴突输出信号时的处理。当然,这只是一个粗糙的模型,不接受生物专业同学之反驳。
2.2. 激活函数
Sigmoid
Sigmoid 将输出限制在 0 到 1 之内,对于神经元的激活频率有良好的解释,但大部分范围内梯度几乎为 0,会“杀死”反向传播。
ReLu
ReLu 的梯度下降收敛速度明显更快,但当一个很大的梯度流过神经元时,神经元可能“死掉”,无法被再次激活。
2.3. 神经网络
多个神经元模型组成神经网络中的一层,类似线性分类评分函数的矩阵表达,其中,多个神经元的向量
w 组成矩阵 W,标量 b 组成向量 b。第 k 层的输出向量为第 k + 1 层的输入向量。第 1 至第 M - 1 为隐藏层,第 M 层为输出层,通常输出层没有激活函数,或者说输出层的激活函数为线性函数。
现代神经网络能容纳很高的层数,这就是深度学习中所谓的深度。
沿用线性分类的表述,输入向量的长度为 D,输出向量的长度为 L,显然,需要学习的参数个数为:
过深的层数能表达更复杂的函数,但对数据中的噪声会产生过拟合(overfitting)。不过,防止过拟合的方式并不是减少层数,过浅的层数产生的局部最优解会更差。