《动手学深度学习》笔记---3.8&3.9&3.10

3.8多层感知机

3.8.1隐藏层

  1. 多层感知机中的隐藏层和输出层都是全连接层
  2. 虽然神经网络引入了隐藏层,确依然等价于一个单层神经网络,输出层权重是Wh * Wo;偏差参数是bhWo + bo
  3. 即使添加更多的隐藏层,以上设计依然只能与仅含输出层的单层神经网络等价

3.8.2 激活函数

  1. 上述问题的根源在于全连接层只是对数据做仿射变换,而多个仿射变换的叠加仍然是一个仿射变换
  2. 解决问题的方式是引入非线性变换。非线性函数被称为激活函数
  3. 以下是几个常用的激活函数。

(1) ReLu函数

# 1. ReLu函数
# rectified linear unit
# ReLU (x) = max(x, 0), 即只保留正数,并将负数清零

# 为了直观地观察这一非线性变换,定义一个绘图函数xyplot

%matplotlib inline
import d2lzh as d2l
from mxnet import autograd, nd

def xyplot(x_vals, y_vals, name):
    d2l.set_figsize(figsize = (5, 2.5))
    d2l.plt.plot(x_vals.asnumpy(), y_vals.asnumpy())
    d2l.plt.xlabel('x')
    d2l.plt.ylabel(name + '(x)')
    
# 通过NDArray提供的relu函数来绘制ReLU函数

x = nd.arange(-8.0, 8.0, 0.1)
x.attach_grad()
with autograd.record():
    y = x.relu()
xyplot(x, y, 'relu')

relu函数

(2) ReLu函数导数

# 输入为正,ReLU函数导数为1;输入为负,ReLU函数导数为0;输入为0,虽不可导,取此处的导数值为0
y.backward()
xyplot(x, x.grad, 'grad of relu')

relu函数导数

(3) sigmoid函数

  1. sigmoid函数是将元素的值变换到0和1之间
  2. sigmoid在早期的神经网络中较为普遍,目前正被ReLU函数逐渐替代
  3. 当输入接近0的时候,sigmoid函数接近线性
  4. 根据链式法则,sigmoid函数的导数为sigmoid’(x) = sigmoid(x)(1 - sigmoid(x))
with autograd.record():
    y = x.sigmoid()
xyplot(x, y, 'sigmoid')

sigmoid函数

(4) sigmoid函数的导数

  1. 当输入为0时,sigmoid函数的导数达到最大值 0.25;
  2. 当输入越便宜0时,sigmoid函数的导数越接近0
y.backward()
xyplot(x, x.grad, 'grad of sigmoid')

sigmoid函数导数

(5)tanh函数

  1. 双曲正切函数,将元素的值变换到-1 到 +1 之间
  2. tanh(x) = (1 - exp(-2x))/(1 + exp(-2x))
  3. 当输入接近0时,tanh函数接近线性变化换。tanh函数在坐标系的原点上对称
with autograd.record():
    y = x.tanh()
xyplot(x, y, 'tanh')

tanh函数

(6)tanh函数导数

  1. 根据链式法则,tanh函数的导数为 tanh’(x) = 1 - tanh^2(x)
  2. 当输入为0时,tanh函数的导数达到最大值1;当输入越偏离0时,tanh函数的导数越接近0
y.backward()
xyplot(x, x.grad, 'grad of tanh')

tanh函数导数

(7)关于求梯度的总结

  1. 参考文章:https://www.jianshu.com/p/1515015c03f2
  2. step1: x.attach_grad()
  3. 是将x加入梯度,申请存储梯度所需要的内存,可通过 x.grad获取x梯度
  4. step2:定义关于x的函数y,调用record()函数来记录与求梯度有关的 计算
with autograd.record()</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值