Neural Network 初学
下文不妨假定神经网络的任务都是给数据分类,回归/预测还不会。
参数:机器学习的内容
超参数:人手动设置的数值,比如学习率、训练轮数
多层感知器 MLP
在 input layer 和 output layer 之间有一堆 hidden layer,每两层之间可以理解成一张完全二分图,二分图的邻接矩阵上有一些权重,随机初始化。
将图片的每个像素点抽出来变成向量之后在二分图上矩阵乘法得到第一层的结果,对这个结果向量每个数变换一下,常用的变换有 ReLU:和 0 取 \(\max\)
最后得到一个长度为 output layer 大小的一维向量。比如在 MNIST 数据集里面就是 \([10,1]\) 大小的向量。向量里面每个数字再做一个 softmax 变换使得其总和为 1,于是第 \(i\) 的数字就表示它是 \(i\) 的概率。
训练集里面每个数字都标注了分类,或者说黑盒应该输出的向量是一个大小为 \([10,1]\) 的向量,只有一个数字为 \(1\)。那么根据差值进行反向传播。
反向传播主要是考虑链式法则。最开始的损失函数是 |output_layer| 元函数,记作 \(F(x_1,\dots x_m)\)。\(\dfrac{d F}{d x_i}\) 可以根据定义计算。
记倒数第二层的数据为 \(y_1\dots y_n\) 那么根据链式法则 \(\dfrac{d F}{dy_j}=\dfrac{dF}{dx_i}\dfrac{dx_i}{dy_j}\)
根据矩阵乘法的定义,\(x_i\) 可以看成关于 \(y_1\dots y_n\) 的 \(n\) 元函数(\(x_i\sum\limits_{j=1}^n y_jw_{j,i}\))
有激活函数的情况就是 \(\dfrac{dF}{dy_i}=\dfrac{dF}{dy'_ {i}} \dfrac{d y'_ {i}}{d y_i}\) 由于 \(y'_ i=f(y_i)\) 中的 \(f\) 已知,那么导数也就行了。
你如果理解到这是一个有向图上跑链式法则就可以了
此时让 \(w_{i,j}\) 加上 \(w_{i,j}\times\) learning rate \(\times \dfrac{d F(x_j)}{d y_i}\) 就行了
一些可能存在的问题:
-
过拟合:神经网络过于复杂,直接把图片信息背过了,通过矩阵乘法维护了出来。
-
梯度消失:因为在反向传播过程中,参数是要损失函数变化最大的方向逆过来更改,找不到梯度(梯度几乎为 0 )那么就是参数消失
-
梯度爆炸:梯度太大,变量更新程度太大,导致网络参数训练的时候没法收敛;解决方法就是 归一化,梯度裁剪(设置阈值使其保持在一定范围内)
卷积神经网络 CNN
MLP 中每层都是一个大矩阵,参数过多,不容易训练。同时他把图片拆成了一维向量,丧失了图片的二维特性。
CNN 每层设置一些卷积核(大小形状任意),这些卷积核和之前的图片进行差卷积:\(w'_ {i,j}=\sum\limits_{x,y}w_{i+x,j+y}\times c_{x,y}\)(边界部分直接把矩阵展开,多出来的部分置 \(0\))。
以识别图片为例,彩色二维图像是 RGB 叠加的,灰度图像是黑白单维度的,那么称 RGB 图像有三个 channel(通道),灰度图像有 1 个channel。记 CNN 某层 \(m\) 卷积核。我们让新 channel 的数量为 \(m\),原先的 3 个 channel 和这 \(m\) 个卷积核卷积之后的结果按照一定权重叠加(权重要训练)得到新的 \(m\) 个二维图片。
在 output layer 前再用一个全连接层映射到一维张量即可
一种可视化黑盒的方式(我现在唯一会的):把 hidden layer 中所有 channel 的中间值加起来再变成一个灰度图像,就完成了可视化。
反向传播过程和 MLP 一样,你发现每层只有九个参数。根据公式,导数应为 \(n\times m\) 个位置求出来的和。或者说还是有向图推一下。
循环神经网络 RNN
RNN 的基本结构包括一个循环单元(或称为RNN单元)和一个隐藏状态(hidden state)。RNN 单元接受当前时间步的输入以及前一个时间步的隐藏状态,并输出当前时间步的隐藏状态。这个隐藏状态可以被视为网络的记忆或状态,能够捕获之前输入的信息。
假设我们有一个序列数据,长度为 \(T\),第 \(t\) 个时间步的输入为 \(x(t)\),隐藏状态为 \(h(t)\),则在 RNN 中,每个时间步的运算可以表达为:\(h(t) = f(W * x(t) + U * h(t-1) + b)\)
其中,f是激活函数(通常为 \(\tanh\) 或 ReLU),\(W\) 是当前时间步输入的权重矩阵,U是前一个时间步隐藏状态的权重矩阵,\(b\) 是偏置向量。
前向传播把最后一层的隐藏状态连一个完全层到 output layer,反向传播仍然是利用有向图来递推。
长短期记忆网络 LSTM
门控循环单元 GRU
强调:代码一概不会写。
待学习的事项
Xavier/ Glorot 初始化