《深度学习入门》第四、五章读书笔记

这里将第四章与第五章放在一起进行总结与回顾,主要是因为通过对比第四章中的数值微分法,以及第五章中的误差反向传播法,能够很好的理解二者的原理以及优劣。

第4章开头很清晰地描述了机器学习与深度学习的区别。例如,在手写数字识别任务中,机器学习方法会先将图像转换为合适的特征量,例如SIFT、HOG等,然后再使用机器学习中的SVM、KNN等进行学习;而深度学习则不需要人为选定特征量,直接使用神经网络对所有参数进行学习即可。对比可以看出:机器学习需要人为设计专门的特征量,而深度学习则不用。因此,深度学习也被称为端到端的机器学习。
Image

4.1.2中介绍了训练数据与测试数据,并由此引出过拟合、欠拟合的概念。验证数据则在后续的章节中被提到,它是用来验证模型超参数是否合适的。

4.2 损失函数

损失函数有很多种,但他们都是在衡量预测值与真实值之间的差。常用的有均方误差(MSE,mean square error)和交叉熵损失(Cross Entropy Error)。

MSE的计算公式为:

E = 1 2 Σ k ( y k − t k ) 2 E=\frac{1}{2}\Sigma_k(y_k-t_k)^2 E=21Σk(yktk)2

交叉熵损失的计算公式为:

E = − Σ k t k log ⁡ y k E=-\Sigma_kt_k\log y_k E=Σktklogyk

我们在训练时,一般会计算一批数据的损失函数的总和,这就引出了分批的必要。从训练数据中选出一批数据(称为mini-batch,小批量)进行学习的学习方式称为小批量学习。在例子中,我们可以使用这样的代码抽取10个数字,得到索引数组:

train_size=x_train.shape[0]
batch_size=10
batch_mask=np.random.choice(train_size, batch_size)
x_batch=x_train[batch_mask]
t_batch=t_train[batch_mask]

设定损失函数的意义就在于,可以对某一个权重参数的损失函数求导,进而进行权重参数的更新。我们之前所做的非线性的激活函数、非线性的损失函数等,都是为了神经网络能够进行学习,这都是学习的基础。

4.3 数值微分 & 4.4 梯度

这两节大部分是在为介绍用数值微分求梯度做一些基础知识的铺垫,以及其python代码实现。

4.5 随机梯度下降法SGD的学习过程

使用随机梯度下降法SGD进行神经网络的学习,其实就是重复下面三个步骤:

这其中,随机指的就是随机选择数据,即分批。

这里又提到了epoch。1个epoch表示学习中所有训练数据均被使用过一次时的更新次数。每次epoch后,对所有的训练数据和测试数据计算识别精度,并记录结果。

第五章 误差反向传播法

第四章讲的是数值微分法计算权重参数的梯度,本章将的是计算更为简单高效的误差反向传播法。这个方法可以通过基于计算图的方法来较为容易的理解。

计算图

计算图是一个有向图,在观察局部情况的时候,会在输入端/输出端添加无源/无汇的箭头以表示输入或输出。计算图的节点表示运算,边表示传递的数值。在计算图上可以同时表示正向传播和反向传播的过程:从左到右为正向传播,从右到左为反向传播,其中反向传播基于的是链式法则和偏导数。

正向传播很容易理解,只需要按照结点的运算规则进行运算和值的传递即可;而计算反向传播时,对于最简单也是最常用的情况,我们只需记住:加法节点会将上游的值原封不动的输出到下游;乘法节点会将原始值乘以对侧正向传播权重的值。

书中以误差反向传播法,实现了基于计算图的ReLU、Sigmoid等激活函数,以及批版本的Affine层、Softmax-with-Loss层(Softmax层+交叉熵损失层,能够实现神经网络在学习阶段中,输出+计算损失的部分)的类。具体代码也讲解的十分全面,如果感兴趣可以自行查阅。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值