神经网络与深度学习--课堂笔记(1)

课程老师:屈桢深老师

参考书籍:《动手学深度学习》


神经元模型

通过对生物神经网络和生物神经元的观察,1943年心理学家W.McCulloch和数学家W.Pitts合作提出了人工神经元模型M-P模型,如下图所示。

单神经元模型函数可由下面式子刻画。

其中,f()称为作用函数或激活函数,根据形式不同,可分为如下几类。

作用函数分类

ReLU函数

ReLU函数通过将相应的活性值设为0,仅保留正元素并丢弃所有负元素。代码实现及图像如下所示。

x = torch.arange(-5.0, 5.0, 0.1 ,requires_grad=True)
y = torch.relu(x)
d2l.plot(x.detach(), y.detach(), 'x', 'relu(x)', figsize=(5,2.5))

当输入为负时,ReLU函数的导数为0,而当输入为正时,ReLU函数的导数为1。 但当输入值等于0时,ReLU函数不可导,此时默认该处导数等于左导数,即为0。代码实现及图像如下所示。

y.backward(torch.ones_like(x), retain_graph=True)
d2l.plot(x.detach(), x.grad, 'x', 'grad of relu', figsize=(5,2.5))
sigmoid函数

在最早的神经网络中,科学家们感兴趣的是对“激发”或“不激发”的生物神经元进行建模。 因此,这一领域的先驱可以一直追溯到人工神经元的发明者麦卡洛克和皮茨,他们专注于阈值单元。 阈值单元在其输入低于某个阈值时取值0,当输入超过阈值时取值1。sigmoid是一个平滑的、可微的阈值单元近似,但在隐藏层中已经较少的使用了,而是被更简单、更容易训练的ReLU所取代。代码实现及图像如下所示。

x = torch.arange(-10.0, 10.0, 0.1 ,requires_grad=True)
y = torch.sigmoid(x)
d2l.plot(x.detach(), y.detach(), 'x', 'sigmoid(x)', figsize=(5,2.5))

sigmoid函数的导数为下面的公式:

当输入为0时,sigmoid函数的导数达到最大值0.25; 而输入在任一方向上越远离0点时,导数越接近0。代码实现及图像如下所示。

y.backward(torch.ones_like(x), retain_graph=True)
d2l.plot(x.detach(), x.grad, 'x', 'grad of sigmoid', figsize=(5,2.5))
tanh函数

当输入在0附近时,tanh函数接近线性变换。 函数的形状类似于sigmoid函数, 不同的是tanh函数关于坐标系原点中心对称。代码实现及图像如下所示。

x = torch.arange(-10.0, 10.0, 0.1 ,requires_grad=True)
y = torch.tanh(x)
d2l.plot(x.detach(), y.detach(), 'x', 'tanh(x)', figsize=(5,2.5))

tanh函数的导数是:

当输入接近0时,tanh函数的导数接近最大值1。 与sigmoid函数图像中看到的类似, 输入在任一方向上越远离0点,导数越接近0。代码实现及图像如下所示。

y.backward(torch.ones_like(x), retain_graph=True)
d2l.plot(x.detach(), x.grad, 'x', 'grad of tanh', figsize=(5,2.5))

Hebb规则

连接权值的调整量与输入与输出的乘积成正比:

感知机模型

输入:训练数据集(x,y)

输出:权值w

步骤:

  1. 赋初值w0,数据序列号i=1,迭代次数k=0。

  1. 选择数据点(x^i, y^i)

  1. 判断该数据点是否为当前模型的误分类点,即判断若

则根据Hebb规则更新权值:

  1. 转到2,直到训练集中没有误分类点。

该模型的优点在于不用求梯度,主要用于线性可分参数迭代过程中。

多层感知机

使用多层感知机模型可以解决线性不可分问题。三层感知器可识别任一凸多边形或无界的凸区域。更多层感知器模型,可识别更为复杂的图形。

多层感知器网络,有如下定理:

定理1:若隐层节点(单元)可任意设置,用三层阈值节点的网络,可以实现任意的二值逻辑函数。

定理2:若隐层节点(单元)可任意设置,用三层S型非线性特性节点的网络,可以一致逼近紧集上的连续函数或按范数逼近紧集上的平方可积函数。

BP网络算法推导

BP算法基本思想

1.设置初始权重系数w0为较小的随机非零值

2.给定输入/输出样本对,计算网络输出,完成前向传播

3.计算目标函数J。如J小于规定的阈值,训练成功,退出;否则转入4

  1. 反向传播计算由输出层,按梯度下降法将误差反向传播,逐层调整权值

前向传播

前向传播(forward propagation)指的是:按顺序(从输入层到输出层)计算和存储神经网络中每层的结果。以单隐藏层和权重衰减正则化的神经网络为例,研究每一层的前向传播机制。

首先,由输入X通过隐藏层权重矩阵W^1得到的中间变量Z

中间变量Z通过隐藏层的激活函数得到隐藏层的输出,也即输出层的输入h

接下来,再通过输出层权重矩阵W^2得到输出变量O

假设损失函数为l,样本标签为y,可以计算当个数据样本的损失项

根据L2正则化的定义,正则化项为

最后,模型在给定数据样本上的正则化损失(目标函数)为

下面为前向传播的计算图(截图来自参考书籍图4.7.1)。

反向传播

反向传播(backward propagation)指的是计算神经网络参数梯度的方法。简言之,该方法根据微积分中的链式规则,按相反的顺序从输出层到输入层遍历网络。 该算法存储了计算某些参数梯度时所需的任何中间变量(偏导数)。参考上面前向传播声明的变量,下面将研究每层后向传播的机制。

首先,目标函数J相对于损失项L和正则项s的梯度

接下来,根据链式法则计算目标函数J关于输出层变量O的梯度

接下来,计算正则化项s相对于两个权重矩阵W^1W^2的梯度

由上可推出目标函数J关于权重矩阵W^2的梯度为

目标函数J关于输出层输入h的梯度

目标函数J关于中间变量Z的梯度

最后,可以得到目标函数J关于权重矩阵W^1的梯度为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值