zl程序教程

您现在的位置是:首页 >  其他

当前栏目

卷积神经网络基础

2023-06-13 09:18:49 时间

1.1 卷积神经网络基础

CNN 卷积神经网络:包含卷积层的网络

全连接层:由神经元连接而成

卷积层:一个滑动窗口在图像上滑动并计算

计算利用卷积核,将卷积核覆盖到图像上,再将卷积核上面的值与图像层相乘,最后相加得到该区域的值。

不断滑动,得到各个位置的卷积值

特性:1.具有局部感知机制 2.权值共享

对多维的矩阵进行卷积操作:

条件:1.输入特征矩阵深度与卷积核深度保持一致 2. 卷积完输出的特征矩阵(深度)与卷积核个数相同

计算:各个深度的卷积层相同位置处,卷积出来的值相加,最后各个深度卷完成一层了

当然卷积核不唯一,卷完之后拼接在一起

具体计算细节问题:

  1. 如何带上偏移量计算? 当前卷积核输出的卷积矩阵,减去偏移量bias
  2. 加上激活函数该如何计算? 常用激活函数: sigmoid激活函数 f(x) = \frac{1}{1+e^{-x}}

relu激活函数

f(x) = Max(0,x)

因为计算过程是一个线性过程,如果想要解决非线性问题,就需要引入非线性因素。

3.越界问题:

矩阵经过卷积操作后的尺寸由以下几个因数决定:

<1>输入图片的大小 W x W

<2>Filter大小F x F (卷积核滑动窗口大小)

<3>步长S

<4>padding的像素数 (补零的像素数) P

经过卷积后的矩阵尺寸大小计算公式为:

N = \frac{W-F+2P}{S+1}

池化层:对特征图进行稀疏处理,减少数据运算量

MaxPooling下采样层

AveragePooling下采样层

·只改变特征矩阵的大小,不改变深度

·一般池化核边长和步长相同

1.2 卷积神经网络基础补充

误差的计算

当前该节点的输出为:

out = \sigma(x_1\times w_{11}^{(1)}+x_2\times w_{21}^{(1)}+b_1^{(1)})

w指权重,b为偏置,x1,x2等为上一个神经元的输出,若上一层为输出层就直接输入数据

上标(1)指当前处于哪一层

下表第一个数字是上一层第几个神经元,第二个数字是本层第几个神经元

最后一层的激活函数是softmax

softmax计算过程:

o_i = \frac{e^{y_i}}{\sum_{j}e^{y_j}}

比如上图,

o_1 = \frac{e^{y_1}}{e^{y_1}+e^{y_2}} o_2 = \frac{e^{y_2}}{e^{y_1}+e^{y_2}}

误差计算方法一:交叉熵损失

根据问题种类,有两种:

1.针对多分类问题(softmax输出,所有输出概率和为1,分类之间没有包含关系)

H = -\sum_i o_ i^* \times log(o_i)

2.针对二分类问题 (sigmoid输出,每个输出节点之间互不相干,分类之间有包含关系)

H = -\frac{1}{N}\sum_{i=1}^N[o_i^*\times logo_i+(1-o_i^*)\times log(1-o_i)]

上述公式中,

H(Loss)为损失,o^*_i为真实值标签,o_i为预测值,默认log以e为底是ln

误差的反向传播

最后带入得到:

\frac{\part Loss}{\part w_{11}^{(2)}} = (o_2^*\times o_1-o_1^* \times o_2)\times a_1

根据误差进行权重的更新

w_{11}^{(2)}(new) = w_{11}^{(2)}(old)-learing_{rate}\times \frac{\part Loss}{\part w_{11}^{(2)}}(gradient)

问题:当分批次训练时,批次的损失梯度和整体sample的方向不一样

所以需要优化器:

  1. SGD优化器: w_{t+1} = w_t-\alpha \times g(w_t) \alpha为学习率,g(w_t)为t时刻对参数w_t的损失梯度

优化器的缺点:

1 容易受样本噪声的影响

2 可能陷入局部最优解

  1. SGD+Momentum优化器: v_t = \eta \times v_{t-1} + \alpha \times g(w_t) w_{t+1} = w_t - v_t \alpha为学习率,g(w_t)为t时刻对参数w_t的损失梯度,\eta(0.9)为动量系数。
  2. Adagrad优化器(自适应学习率) s_t = s_{t-1}+g(w_t)^2 w_{t+1} = w_t - \frac {\alpha}{\sqrt{s_t+\epsilon}}*g(w_t)

\alpha 为学习率,g(w_t)为t时刻对参数w_t的损失梯度,\epsilon(10^{-7}为防止分母为0的小数)

缺点:学习率下降太快可能还没收敛就停止训练