[动手学深度学习]多层感知机学习笔记

动手学深度学习-李沐(视频):10 多层感知机 + 代码实现 - 动手学深度学习v2_哔哩哔哩_bilibili

动手学深度学习-李沐(网页):4. 多层感知机 — 动手学深度学习 2.0.0 documentation (d2l.ai)

⭐这是jupyter与torch结合的笔记!!!

目录

1. 感知机

1.1. 概念

1.2. 训练感知机

2. 多层感知机

2.1. 多层分类

3. 激活函数

3.1. 激活函数的意义

3.2. 常见激活函数

4. 多层感知机的代码实现

4.1. 从零实现

4.2. 简洁实现

5. 模型选择、欠拟合和过拟合

5.1. VC维(Vapnik-Chervonenkis Dimension)

6. 权重衰退

6.1. 限制内容

6.2. 参数更新法则

7. 丢弃法(Dropout)

7.1. 意义

7.2. 方式

8. 数值稳定性

8.1. 神经网络的梯度

9. 模型初始化和激活函数

9.1. 设置方差

9.2. 权重初始化

9.3. 方差

9.4. Xavier初始

10. Reference List

1. 感知机

1.1. 概念

(1)感知机是一种二元线性分类器,是最简单形式的前馈式人工神经网络(不同于softmax多分类)

(2)例子

1.2. 训练感知机

(1)训练步骤

        ①初始化w = 0, b = 0(和之前随机定义w不一样)

        ②重复判断 yi * (<w,xi>+b) 是否小于等于0(意思是yi是真实的种类的值,如1或-1,而<w,xi>+b是我们预测出来的种类1或-1,如果预测对了两个就都是同号,会得到大于0的值,错了则负值)

        ③如果预测错误(上面那个为负值进循环),则更新数据w←w+yixi,b←b+yi

        ④直到正确,退出循环

(2)等价于使用批量大小为1的梯度下降,并使用如下的损失函数(分类对了没梯度,错了才有)

(3)收敛定理

(4)感知机不能解决异或(XOR)问题,因为它不能用一根线把异或点分开

2. 多层感知机

2.1. 多层分类

(1)解决XOR问题

 (2)隐藏层(可以单层也可以多层,不过最好一个比一个小,不然太大了)

(3)单隐藏层的单分类

σ激活函数很重要,这样才能真正实现多层。如果去掉σ的话,o实际上可以变为以下表示方法。这样就又回归单层感知机了

3. 激活函数

3.1. 激活函数的意义

(1)Change the erformance of deep learning networks (Bingham & Miikkulainen, 2022).

(2)使神经网络跳出单层线性转换

3.2. 常见激活函数

(1)ReLU(Rectified Linear Unit)

        ①公式

        ②用matplotlib画图

import matplotlib as mpl
import matplotlib.pyplot as plt
import torch

"""就是麻烦在这个点"""
fig, ax = plt.subplots()

x = torch.arange(-5,5,0.1)
y = torch.relu(x)

ax.plot(x,y)

        ③用李沐的d2l包画图

import torch

x = torch.arange(-5,5,0.1)
y = torch.relu(x)

d2l.plot(x,y)

        ④李沐的书上的

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

        ⑤ReLU的导数图像和我自己的简洁代码

x = torch.arange(-5,5,0.1,requires_grad=True)
y = torch.relu(x)

y.backward(torch.ones_like(x))
d2l.plot(x.detach(),x.grad)

(2)Sigmoid

        ①公式

        ②代码和图像

x = torch.arange(-5,5,0.1,requires_grad=False)
"""纯纯调库罢了懒得写了"""
y = torch.sigmoid(x)

d2l.plot(x,y)

        ③导数公式(非常神奇的导数)

(3)tanh

        ①公式

        ②图像

        ③导数

4. 多层感知机的代码实现

4.1. 从零实现

(1)相当于自己写激活函数公式的函数吧...  我觉得没有太大的必要

4.2. 简洁实现

(1)代码

net = nn.Sequential(nn.Flatten(),
                    nn.Linear(784, 256),
                    nn.ReLU(),
                    nn.Linear(256, 10))

def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)

net.apply(init_weights);

5. 模型选择、欠拟合和过拟合

5.1. VC维(Vapnik-Chervonenkis Dimension)

(1)概念:对于n维的数据,需要VC(n+1)维的分类函数就可以把其中任意数据分类

(2)一些多层感知机的VC维是O(Nlog2N)

6. 权重衰退

6.1. 限制内容

(1)使用均方范数硬性限制参数值的选择范围来控制模型容量

(2)通常不限制b,因为影响不大

(3)小的θ通常意味着更强的正则项

(4)也可以使用均方范数作为柔性限制

6.2. 参数更新法则

(1)计算梯度(其中λ是超参数)

 (2)时间t更新参数

 (3)通常ηλ<1,在深度学习中叫权重衰退

7. 丢弃法(Dropout)

7.1. 意义

(1)在层之间加入噪音,使得机器的泛化能力更强

7.2. 方式

(1)无偏差加入噪音,随机丢弃

8. 数值稳定性

8.1. 神经网络的梯度

(1)计算

 (2)问题

        ①梯度爆炸:超出值域无法计算。同时它会对学习率非常敏感,学习率太大导致更大的梯度,学习率太小导致训练没有进展。因此需要不断调整学习率

        ②梯度消失:梯度可能变成0,训练不会有进展,仅仅顶层训练还好,但是无法让神经网络更深

(3)计算例子(这个不会算!!所以第二行和第三行到底是什么!

 

9. 模型初始化和激活函数

9.1. 设置方差

(1)将每层的输出和梯度都看作随机变量

(2)让它们的均值和方差都保持一致

9.2. 权重初始化

(1)使用N(0,0.01)来初始化权重可能对小网络没问题,但没办法保证深度神经网络

(2)一般来说越靠近最优解的地方梯度越平

9.3. 方差

(1)正向方差(......

 (2)反向均值和方差

 

9.4. Xavier初始

(1)方法:根据输入输出改变权重

 

10. Reference List

Bingham, G. & Miikkulainen, R. (2022) 'Discovering Parametric Activation Functions', Neural Networks, vol. 148, pp. 48-65. doi: Redirecting

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值