Loading

卷积神经网络学习笔记

全连接神经网络的结构

  1. 全连接神经网络的整体结构

    可以简化为智能函数 \(y = f_θ(x)\)
    输入和输出层一般为数据矩阵

  2. 全连接网络的单元结构
    神经网络的思路:从单元到整体
    一个单元的结构:
    image
    \(X_1, X_2, X_3...\)是很多矩阵,然后这些矩阵分别乘上对应的权重矩阵,再加上偏置矩阵b,输入给激活函数,就会输出结果

    用数学形式表达就是:

    \(y_1 = h(X_1W_1 + X_2W_2 + X_3W_3 + b)\)
    \(h(x)\)为激活函数)

    所以如果想输出优质结果,就要调整各个输入的权重W

    下一层的神经网络以这一层的输出为输入,进行同样的运算:

    \(y_2 = h(y_1W + b)\)

激活函数

  1. 为什么激活函数一般不用线性函数?

    \(h(x) = kx + b\),则下一层的运算结果\(h((h(x)) = k^2x + kb + b\),仍为\(y = kx + b\)形式,也就是说没有体现出层数增加带来的效果

  2. sigmoid函数

    \(y = \frac{1}{1+e^{-z}}\)
    \(y' = y(1-y)\)
    image

    特点:值域为(0,1),在x接近0处梯度较好
    优点:

    • 简单,适合分类任务

    缺点

    • 在远离0的地方梯度过小,反向传播算法会出问题
    • 值域不关于0对称
  3. tanh激活函数(双曲正切函数)

    \(y = \frac{e^z-e^{-z}}{e^z+e^{-z}}\)
    \(y' = 1-y^2\)
    image

    特点:

    • 与sigmoid函数很像
    • 值域为(-1,1),关于0对称

    优点:

    • 比sigmoid收敛快
    • 值域关于0对称

    缺点

    • 可能出现梯度消失问题
  4. ReLU函数

    \(y = \begin{cases} 0, &x\leq0\\ x, &x>0 \end{cases}\)

    \(y' = \begin{cases} 0, &x\leq0\\ 1, &x>0 \end{cases}\)
    image

    特点:

    • 分段函数

    优点:

    • 解决了梯度消失问题
    • 没有指数运算,运算更为简便

    缺点:

    • 可能会出现神经元死亡的问题(也就是当x<0的时候,梯度为0,参数不再更新)
  5. leaky ReLU函数

    \(y = \begin{cases} ax, &x\leq0\\ x, &x>0 \end{cases}(a\neq1)\)

    \(y' = \begin{cases} a, &x\leq0\\ 1, &x>0 \end{cases}\)

    特点:

    • 分段函数

    优点:

    • 不会出现神经元死亡的问题

    缺点:

    • 对正、负的输入,对应的函数不同,无法进行一致的关系预测

损失函数

\(J(x) = \frac{1}{2m}\sum\limits_{i=1}^m(f(x_i)-y_i)^2\)
这里用1/2m而不是1/m是为了方便求导

神经网络的训练流程:

  1. 前向传播
  2. 计算误差
  3. 反向传播

反向传播

梯度下降算法
\(w = w_0 - a\frac{\partial J}{\partial w}\)
\(b = b_0 - a\frac{\partial J}{\partial b}\)

关于梯度下降算法的原理:
对一个函数\(f(x, y), 在随机一点(ω_0, f_0)泰勒展开,取前两项,得f(ω) = f(ω_0) + \nabla f(ω_0)(ω - ω_0)\)\(\nabla f(ω_0)\)是函数的梯度
移项得
\(f(ω) - f(ω_0) = \nabla f(ω_0)(ω - ω_0)\)
\(ω = ω_{t+1}, ω_0 = ω_t\),则左边衡量的是下降前后函数值的变化量,这个变化量为负,且我们希望它尽可能小
现在研究右边,设\(ω - ω_0 = \Delta ω\),这是一个向量,\(\nabla f(ω_t)\)也是个向量,也就是让这两个向量的内积尽量小,所以他们俩应该共线反向
所以\(\Delta ω = -||\Delta ω||\frac{\nabla f(ω_t)}{||\nabla f(ω_t)||}\)
因此\(ω_{t+1} - ω_t = -||\Delta ω||\frac{\nabla f(ω_t)}{||\nabla f(ω_t)||}\)
移项得\(ω_{t+1} = ω_t - ||\Delta ω||\frac{\nabla f(ω_t)}{||\nabla f(ω_t)||}\)
设学习率\(a = \frac{||\Delta ω||}{||\nabla f(ω_t)||}\),则得到梯度下降公式

计算机对图像的存储

每个像素点记录为一个数,灰度图为一个矩阵,彩色图为RGB三通道矩阵

全连接层的缺点

参数量过大,难以计算,容易过拟合

卷积神经网络

  1. 卷积运算
    卷积核在输入矩阵上滑动,运算方式是将卷积核与原矩阵对应的元素相乘再求和,再加上偏置,形成输出的一个元素。
    image
    卷积核的各个元素就相当于全连接的参数W
    卷积有两个特殊的值:步长(Stride)和填充(Padding)
  • 填充就是在图像的周围补0,补几圈P就等于几
  • 步长就是卷积核每次移动的距离
    如何计算输出矩阵的高宽?
    设原矩阵高为H,宽为W,输出的矩阵高宽为OH、OW,卷积核高宽为FH、FW,则
    \(OH = \frac{2P + H - FH}{S} + 1\)
    \(OW = \frac{2P + W - FW}{S} + 1\)
    如果多通道的图片进行卷积,卷积核也是多通道的,但输出的图会把对应的元素进行相加,成为一个单通道图片
    卷积核可以有多个,如果多个卷积核,就会输出多个特征图
  1. 池化运算
    也有类似卷积的核和步长,是一个核滑动的形式,但是没有参数(这个核称作“感受野”)
    image
    池化有两种常见类型
  • 最大池化:取池化范围的最大值作为输出的元素
  • 平均池化:取池化范围的平均值作为输出的元素
  1. 卷积神经网络的整体构造
    image

深度神经网络的模型搭建

程序结构

model.py:模型
train.py

  • 数据处理
  • 模型训练
  • 记录loss值、accuracy值
    test.py:对数据测试

如果修改模型,可以只改model.py,train和test不用怎么改

posted @ 2024-01-23 22:12  没法要了  阅读(62)  评论(0)    收藏  举报