集成学习、dropout层、学习衰减率、data augmentation(如图像的旋转、平移、crop、flip处理等) 、加深层(Resnet,加深层的网络可以用更少的参数达到同等水平表现力)都有助于提高识别精度
尤其是data augmentation虽然方法简单,但是识别精度上效果显著。
例VGG:
网络层比简单CNN深,全连接中使用Dropout,基于Adam最优化,He权重初始值,
W是和控制输入信号的重要新的参数, 偏置是调整神经元被激活的容易程度
设置权重参数:权重使用符合高斯分布的随机数进行初始化,偏置使用0进行初始化( np.zeros(hidden_size) )
权值衰减:权值衰减就是一种以减小权重参数的值为目的进行学习的方法。通过减小权重参数的值来抑制过拟合的发生。
如神经元数量、batch大小、学习率、权值衰减等
阶跃函数(感知机),神经网络的函数如sigmoid函数,Relu函数
一般地,回归问题可以使用恒等函数、二元分类问题可以使用 sigmoid函数、多元分类问题可以使用 softmax函数。
Softmax函数:
1. 实现的时候 + C'
2. 输出0.0-1.0之间实数,输出总和是1,所以输出解释为概率
3. 各个元素之间大小关系不会改变( 因此神经网络分类问题中输出层的softmax函数可以省略)
以损失函数为基准,寻找最优权重参数。这个损失函数可以使用任意函数,但一般用均方误差和交叉熵误差等。
不用全部的训练集来计算损失函数,用mini-batch随机选出一批数据然后求梯度和损失函数(但这个损失函数是对训练数据的某个mini-batch的损失函数值,光看这个结果不能说明该神经网络在其他数据集上也能一定有同等程度表现)。
所以损失函数比较的是(y, t),参数就是预测值y和标签t
主要看y的维度
若y是一维,则比如y.shape==(1,10)(表示一张图预测的概率值),求单个数据的交叉熵误差要改变形状,那么t也要变成一维(1, t_size)
若y是二维(mini-batch批量预测 y.shape ==(batch_size,10), 则t和y同维,后面除以batch_size计算得到单个数据的平均损失函数就可以了
为了找到使损失函数最小的值尽可能小的地方,需要计算参数的导数(梯度),然后以这个导数为指引逐步更新参数的值。
对权重参数的损失函数求导,表示“如果稍微改变这个权重参数的值,损失函数的值会如果变化”。
如果导数的值为负,通过使该权重参数向正方向改变,可以减小损失函数的值;反过来,如果导数的值为正,则通过使该权重参数向负方向改变,可以减小损失函数的值。
梯度
由全部变量的偏导数汇总而成的向量称为梯度(gradient)
grads={}这个字典里就是保存各个权重参数的偏导数,梯度表示的是各点处的函数值减小最多的方向,因此以梯度的信息为线索决定前进方向。
数值微分法求偏导数的函数gradient(or numerical_gradient)值需要用到的参数是:( f, x );
f是函数,x是权重参数,以numpy数组形式保存。通常后面调用用到loss(x,t)作为函数f, 用各个权重参数如w1,b2等来计算梯度。(误差反向传播法不用f做参数)
神经网络的梯度
将输入数据展开以适合滤波器(权重)
对3维的输入数据应用im2col后,数据转换为2维矩阵(正确地讲,是把包含批数量的4维数据转换成了2维数据)。也就是将3维方块展开为1列。
im2col可以将卷积层进行的运算转换为大型矩阵的乘积,这个方式的实现对GPU来说是非常方便的实现方式。
im2col会考虑滤波器大小、步幅、填充:m2col (input_data, filter_h, filter_w, stride=1, pad=0)
简单层:relu层、sigmoid层
实现矩阵的乘积运算(仿射变换),仿射变换的处理实现。如 Y = X*W = B
反向传播:
批版本Affine层
全连接层需要将3维数据拉平为1维数据。全连接层会忽略形状,将全部都是输入数据作为统一维度的神经元处理
神经网络学习阶段要softmax层
交叉熵误差是cross entropy error层
softmax-with-loss层也就是softmax和cross entropy error层的组合
使用交叉熵误差作为 softmax函数的损失函数后,反向传播得到(y1 − t1, y2 − t2, y3 − t3)这样“漂亮”的结果。然后神经网络的反向传播会把这个差分表示的误差传递给前面的层(传递给前面层的是单个数据的误差,也就是说如果是mini-batch的话要除以批的大小batch_size),这是神经网络学习中的重要性质。
调整各层的激活值分布使其拥有适当的广度。为此,要向神经网络中插入对数据分布进行正规化的层,即Batch Normalization层(下文简称Batch Norm层),
Batch Norm,顾名思义,以进行学习时的mini-batch为单位,按mini-batch进行正规化。插入到激活函数的前面(或者后面),可以减少数据分布的偏向
能保持输入形状不变,比如保持输入的三维图像
卷积运算——滤波器运算;滤波器就是权重,在CNN的实现里是权重参数
增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。
在3维数据的卷积运算中,输入数据和滤波器的通道数要设为相同的值。(C相同)
如果要在通道方向上也拥有多个卷积运算的输出,要用多个滤波器(权重)。下图中的滤波器就是四维数据。
批处理:
批处理的话要各层见传递的数据保存为4维数据(batch_num, C,H,W) 顺序保存数据
如果堆叠多层卷积层,随着层次加深,提取的信息也越抽象、越复杂。
一般来说,池化的窗口大小会和步幅设定成相同的值,池化层应用区域按通道单独展开