Neural Network 初学

发布时间 2023-07-30 09:47:50作者: yspm

参数:机器学习的内容

超参数:人手动设置的数值,比如学习率、训练轮数

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 )那么就是参数消失

  • 梯度爆炸:梯度太大,变量更新程度太大,导致网络参数训练的时候没法收敛;解决方法就是 归一化,梯度裁剪(设置阈值使其保持在一定范围内)

  • batch_size=1 和 batch_size≠1 对流程的影响不只是说并行计算:在计算差值的时候,由于公式是直接除掉 batch_size 作为最后结果(求均值)
    单个图片反向传播是很凶猛的,但是求平均值后可能温和一些。

黑盒可视化

使用 CNN 时可以把若干 channel(例如 RGB 是三个 channel,CNN 先随机若干矩阵把 channel 增多,那么这个矩阵里面的参数就是学习对象)

可能可以把 hidden layer 中所有 channel 的中间值加起来再变成一个灰度图像,就完成了可视化。

现在只会这一种。

待学习的事项

Xavier/ Glorot 初始化

如何保存丹药