【深度学习2】基于Pytorch实现多层感知机(MLP)模型识别手写数字

目录

1. 概述

2. 网络架构

3. 矩阵表达

4. 激活函数

5. 权重衰退

6. 丢弃法(dropout)

7. 源代码

8. 参考资料


1. 概述

        本文是作者自学深度学习的第3篇章(学习资料为李沐老师的深度学习课程),对多层感知机(MLP)的网络架构矩阵表达激活函数权重衰退丢弃法(dropout)等内容进行了整理和归纳。

2. 网络架构

        多层感知机通常被认为是神经网络的代表,和单层神经网络不同,多层感知机往往具有多个隐藏层,以此来提升模型的表达能力,其网络架构如下

其中 x = {x1, x2, x3, x4}表示1个样本的输入,特征大小为 4,h = {h1, h2, h3, h4, h5}表示隐藏层的神经元,个数为5。o = {o1, o2, o3} 表示数据的输出,如在分类模型中,o1-o3可以分别表示猫、狗、鸡的概率。

3. 矩阵表达

        对于上图具有单隐藏层的网络,我们可以使用如下方式表示:

H =XW^{(1)}+b^{(1)}

O=HW^{(2)}+b^{(2)} 

  1. 其中,X为特征矩阵,行数 = 样本数,列数 = 特征数。
  2. W(1)为输入层到隐藏层的权重矩阵,行数 = 特征数,列数 = 隐藏层神经元数。
  3. H为隐藏层矩阵,行数 = 样本数,列数 = 隐藏层神经元个数。
  4. W(2)为隐藏层到输出层的权重矩阵,行数 = 隐藏层神经元个数,列数 = 输出神经元个数。
  5. O为输出矩阵,行数 = 样本数, 列数 = 输出神经元个数。
  6. b为偏置项。

4. 激活函数

        理论上可以证明,上述MLP模型和单层神经网络等价,为了使得多层感知机具有更好的表达能力,考虑使用激活函数 \sigma 给模型添加非线性性,则模型可以表示为

H=\sigma (XW^{(1)}+b^{(1)})

 O=HW^{(2)}+b^{(2)}

即将第1隐藏层的输出经过非线性变换后在输入到下一层网络。 常见的激活函数如下:

  1. ReLu
  2. sigmoid
  3. tanh

5. 权重衰退

       为了避免过拟合问题,常引入正则化技术,所谓正则化就是使得模型的权重系数尽量集中在原点附近,常用的做法是将权重的范数添加到损失函数中,以L2范数为例,损失函数可以定义为:

Loss=L(w,b)+\frac{\lambda }{2}\left \| w \right \|^{2}

 对权重w求偏导可得:

\frac{\partial Loss}{\partial w}=\frac{\partial L(w,b)}{\partial w}+\lambda w

 则有权重更新:

w\leftarrow (1-\eta \lambda)w-\frac{\eta}{\left | B \right |}\sum_{i\epsilon B}^{}x^{(i)}(w^{T+b-y^{(i)}})

即每次迭代后,w都会进行一定程度的衰退。

6. 丢弃法(dropout)

        除了正则化方法之外,丢弃法也是避免模型过拟合的常用方法之一,其网络结构如下所示:

即以一定的概率对隐藏层的输出置为0(即丢弃),使得模型整体更为稳定,具体而言,模型以下述方式进行丢弃:

注意到经过丢弃后,隐藏层期望不变,即E\left [ h' \right ]=h

7. 源代码

基于Pytorch实现MLP模型用于MNIST手写数字识别

8. 参考资料

李沐带你学深度学习【多层感知机】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值