author:斋藤康毅 translator:陆宇杰
pass
- XOR(x1,x2) = AND(NAND(x1,x2), OR(x1,x2));
- 3层神经元实际上经过的是2层运算,所以有的文献称为2层网络/感知机,有的称为3层网络/感知机;
- 网络权重保存在字典中,程序写出来非常简洁易懂;
- softmax函数:在网络训练时需要softmax函数,在网络推理时不需要softmax函数,因为根据softmax层前的网络输出就可以分类,softmax并不改变分类结果,只是在网络学习反向传播计算梯度的时候为方便设计出来的函数;回归问题一般用恒等函数,分类问题用softmax函数
- 神经网络学习称为端到端的机器学习(end-to-end machine learning),意思是从原始数据(输入)到目标结果(输出);
- 损失函数一般为均方误差(mean square error)或交叉熵误差(cross entropy error);
- batch: 一次学习使用多个数据;
- mini-batch: 训练数据量太大,不能一次学完,从训练数据中选出一小批数据称为mini-batch,对每个mini-batch进行学习;
- 网络学习过程:(a)选择出mini-batch, (b)计算梯度 (c)更新参数 (d)重复abc;
- 随机梯度下降法(SGD, stochastic gradient descent),随机指的是随机选择出的mini-batch的意思,即,对随机选择出的数据进行的梯度下降法;
- mini-batch的一般做法是,先将所有训练数据随机打乱,然后按指定的批次大小,顺序生成mini-batch;这样每个mini-batch都有一个索引号,然后用索引号可以遍历所有mini-batch;遍历一次所有数据,称为一个epoch;每过一个或几个epoch,可以输出一些学习信息,显示学习进度;
- 计算图computation graph(参考Andrej Karpathy的博客),通过计算图的反向传播,可以方便的计算导数;
- 网络的每个节点都用一个类实现,每个类中都有forward和backward函数,在实现网络的时候,就可以通过函数的叠加(事实上还有更简洁的方法)实现前向传播和后向传播;
- softmax和cross entropy error层的反向传播系数为$(y_1-t_1, y_2-t_2, ... , y_n-t_n)$,得到这样漂亮的结果不是偶然的,而是特意设计了softmax函数和交叉熵误差一起,才得到这样的反向传播效果;回归问题中恒等函数与均方误差的配合,也是设计出来,得到这样的反向传播效果;
- 通过OrderedDict存储神经网络各层的参数等信息,程序写出来特别简洁易懂;
- 参数更新方法:SGD, Momentum, AdaGrad, Adam; AdaGrad即adaptive grad, 对大幅更新过的参数,降低其后续更新幅度;Adam结合了Momentum和AdaGrad;
- 权重初始值:Xavier初始值,标准差为$1/\sqrt{n}$,n为上一层节点数;ReLU激活函数配He初始值,标准差为$\sqrt{2/n}$;
- Batch Normalization: 在学习时以mini-batch为单位,按照mini-batch进行归一化,即是数据称为零均值单位方差,Batch Norm操作可以放在激活函数前或后;
- Regularization: 权值衰减weight decay, 即对大的权重进行惩罚,即在损失函数中加入权值的L2范数作为惩罚项;
- Hyper parameter: 验证数据是为了优化超参数,选出一个好的超参数取值范围;
- An example of CNN: input-> Conv->ReLU->Pooling-> Conv->ReLU->Pooling-> Conv->ReLU-> Affine->ReLU-> Affine->Softmax->Output;
- Mul-Add: 乘积累加运算,指一个卷积运算中所有的乘积与累加作为一个运算单位;
- 4 dimensions data in batch 3D convolution: input, batch-size × channel × height × width; filter, filter-num × channel × filter-height × filter-width; output, batch-size × fiter-num × output-height × output-width; output-height = (height + 2 * padding - filter-height)/stride + 1, output-width = (width + 2 * padding - filter-width)/stride + 1;
- 使用im2col实现convolution层和pooling层,im2col将卷积运算转换成大型矩阵乘积,对于GPU来说进行大型矩阵运算特别方便,有进行专门优化过的库cuDNN;
- 网络加深的好处:(a)参数数量变少,5×5的一层拆分成3×3的2层,参数由25减少到18;(b)学习效率提高,网络分层学习图像不同的特征,更深的层学习到的不变特征更高级;
- VGG, 连续应用卷积层;GoogLeNet, 以横向Inception结构为构件组成网络;ResNet by Mircosoft, 引入了快捷结构使网络加深的同时准确度不断提高;
- 迁移学习transfer learning在深度学习中的应用:将在别的数据集上训练好的网络拿到新的数据集上进行精调;
- 目标检测,R-CNN, faster R-CNN;图像分割,FCN;NIC, neural image caption;