深度学习之神经网络

神经网络分为学习和推理。

神经网络就是将输入变换为输出,类似函数作用。

1 神经网络的推理

结论:箭头有权重,还要加上偏置(不受前一层神经元影响的常数),该图为2层神经网络

结论:其实就是矩阵相乘,注意权重和偏置以及对于维度。

mini-batch:小批量同时对多笔样本数据进行推理和学习。

sigmoid函数:非线性激活函数,增强神经网络的表现力,接收任意大小的实数,输出0~1的实数

例子:

1.1 层的类化及正向传播的实现

正向传播:从输入层到输出层的传播

反向传播:与正向传播相反的顺序传播数据(梯度)

代码规范:

2 神经网络的学习

2.1 损失函数

损失:神经网络学习的指标,基于监督数据(学习阶段获得的正确的数据)和神经网络预测的结果,将模型的恶劣程度作为标量(单一数值)计算出来

交叉熵误差:多类别分类的神经网络的损失函数

softmax函数:

交叉熵误差:

2.2 导数和梯度

神经网络的学习目标是找到损失尽可能小的参数。

其实就是求偏导。

深度学习中的梯度一般定义为关于矩阵和张量的导数。

2.3 链式法则

链式法则就是符合函数求导法则,跟我们高数学得一个意思。

神经网络是由多个函数复合而成的。误差反向传播法会充分利用链式法则来求关于多个函数(神经网络)的梯度。

2.4 计算图

2.4.1 乘法节点

2.4.2 分支节点

分支节点也称为复制节点。

它的反向传播是上游传来的梯度之和。

2.4.5 repeat节点

复制N份,反向传播是N个梯度求和。

2.4.6 sum节点

sum节点是通用加法节点;sum节点的反向传播将上游传来的梯度分配到所有箭头上。

sum节点和repeat节点存在逆向关系。

2.4.7 matmul节点

矩阵乘积

2.5 梯度推导和反向传播的实现

2.5.1 sigmoid层

2.5.2 affine层
通过 y = np.dot(x, W) + b 实现了 Affine 层的正向传播。
通过 MatMul 节点进行矩阵乘积的计算。偏置被 Repeat 节点复制,然后进行加法运算(可以认为 NumPy 的广播功能在内部进行了Repeat 节点的计算)。
2.5.3 softmax with loss 层
Softmax 函数和交叉熵误差一起实现为 Softmax with Loss 层。
Softmax 层对输入 a 1 , a 2 , a 3 进行正规化,输出 y 1 , y 2 , y 3 Cross Entropy Error 层接收 Softmax 的输出 y 1 , y 2 , y 3 和监督标签 t 1 , t 2 , t 3 ,并基于这些数据输出损失 L

2.6 权重的更新

通过误差反向传播法求出梯度后,就可以使用该梯度更新神经网络的参数。
梯度下降法:将参数向该梯度的反方向更新,可以降低损失。
权重更新方法有很多,这里我们来实现其中最简单的 随机梯度下降法(SGD)。

3 使用神经网络解决问题

3.1 螺旋状数据集

3.2 神经网络的实现

已用下面的trainer类便捷实现。

3.3 trainer类

4 计算的高速化

4.1 位精度

NumPy 的浮点数默认使用 64 位的数据类型。
但32为更适用于神经网络推理和学习。所以可以将64位数据指定为32位。
16位不适用与计算等,但保存有用,所以本书仅在保存学习好的权重时,将其变换为 16 位浮点数。

4.2 GUP(CuPy)

深度学习的计算由大量的乘法累加运算组成。这些乘法累加运算的绝大部分可以并行计算,这是 GPU CPU 擅长的地方。
CuPy 是基于 GPU 进行并行计算的库。要使用 CuPy ,需要使用安装有 NVIDIA GPU 的机器,并且需要安装 CUDA 这个面向 GPU 的通用并行计算平台。
CuPy NumPy 拥有共同的 API,CuPy 的使用方法与 NumPy 基本相同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值