多层感知机MLP(五)

写在前面:
线性回归见: 线性回归与实现(三)
Softmax回归见: Softmax回归(四)
公式符号详见: 论文数学公式编辑
参考书:动手学深度学习

1 多层感知机MLP

前文线性回归与实现(三)Softmax回归(四)都是线性模型。然而多少问题能是线性的呢?线性是一个很强的假设。

1.1 线性模型的问题

1) 线性意味着单调性假设:任何特征的增大都会导致模型输出的持续增大(或持续减小)。
2)废话:不能很好地解决非线性问题,比如先增后减问题。

1.2 引入隐藏层成就多层感知机

对于先增后减问题我们能否用线性模型解决呢?
当然可以,我们可以分段考虑,前半段和后半段不都是线性吗。这需要怎么做呢?
在这里插入图片描述

为了克服线性模型的限制,最朴素的思想是多来几个线性层,这样我的模型复杂度不就提高了吗。

我们可以在网络中加入一个或多个隐藏层来克服线性模型的限制,使其能处理更普遍的函数关系类型。这种架构通常称为多层感知机(multilayer perceptron)通常缩写为MLP。 在中间的就叫隐藏层。

线性模型

在这里插入图片描述

单隐藏层感知机

在这里插入图片描述

1.3 添加激活函数引入非线性

但是还有一个问题来了,假如人家是非线性先增后减呢? 这时候不能继续用线性模型分类讨论了(因为需要模型无限大)。
在这里插入图片描述

Softmax回归(四)中我们已经得到多输出线性模型的表达式:
O = X W + b (1) \mathbf{O}=\mathbf{X}\mathbf{W}+\mathbf{b} \tag{1} O=XW+b(1)
现在我们用 H \mathbf{H} H表示隐藏层(单隐藏层)输出,那么现在的模型表达式为:
H = X W ( 1 ) + b ( 1 ) , O = H W ( 2 ) + b ( 2 ) . (2) \begin{align}\mathbf{H}=\mathbf{X}\mathbf{W}^{(1)}+\mathbf{b}^{(1)},\\\mathbf{O}=\mathbf{HW}^{(2)}+\mathbf{b}^{(2)}.\end{align}\tag{2} H=XW(1)+b(1),O=HW(2)+b(2).(2)

可见,虽然增加隐藏层可以使线性模型有更强的表达能力,然而线性意味着无法很好的表征非线性关系。而且多个线性模型的叠加最后还是被退化为线性模型。即:
O = ( X W ( 1 ) + b ( 1 ) ) W ( 2 ) + b ( 2 ) = X W ( 1 ) W ( 2 ) + b ( 1 ) W ( 2 ) + b ( 2 ) = X W + b . (3) \mathbf{O}=(\mathbf{XW}^{(1)}+\mathbf{b}^{(1)})\mathbf{W}^{(2)}+\mathbf{b}^{(2)}=\mathbf{XW}^{(1)}\mathbf{W}^{(2)}+\mathbf{b}^{(1)}\mathbf{W}^{(2)}+\mathbf{b}^{(2)}=\mathbf{XW}+\mathbf{b}. \tag{3} O=(XW(1)+b(1))W(2)+b(2)=XW(1)W(2)+b(1)W(2)+b(2)=XW+b.(3)
其中 W = W ( 1 ) W ( 2 ) \mathbf{W}=\mathbf{W}^{(1)}\mathbf{W}^{(2)} W=W(1)W(2) b = b ( 1 ) W ( 2 ) + b ( 2 ) \mathbf{b}=\mathbf{b}^{(1)}\mathbf{W}^{(2)}+\mathbf{b}^{(2)} b=b(1)W(2)+b(2)

引入非线性思想同样朴素,对隐藏层的输出结果添加非线性函数映射。现假设有非线性的激活函数(activation function) σ ( ⋅ ) \sigma(\cdot) σ()。**我们对隐藏层添加激活函数就引入了非线性。**如此,模型就不会退化为线性模型:

H = σ ( X W ( 1 ) + b ( 1 ) ) , O = H W ( 2 ) + b ( 2 ) . (4) \begin{aligned}&\mathbf{H}=\sigma(\mathbf{X}\mathbf{W}^{(1)}+\mathbf{b}^{(1)}),\\&\mathbf{O}=\mathbf{HW}^{(2)}+\mathbf{b}^{(2)}.\end{aligned}\tag{4} H=σ(XW(1)+b(1)),O=HW(2)+b(2).(4)

引入激活函数的单隐藏层感知机

在这里插入图片描述
假设每个隐藏层层都有激活函数,我们可以得到一个多层的非线性多层感知机:

在这里插入图片描述
PS:我们平时见到的模型都是默认添加激活函数的,也叫做激活层,但我们一般不会在图上特意标出。

1.4 3个常用激活函数

激活函数名字很fancy,其实就是个可求导的非线性函数。

  1. ReLU: rectified linear unit。最好算,最常用。(0处导数特判即可,我们只是为了引入非线性,不严格按照数学定义)
    R e L U ( x ) = max ⁡ ( x , 0 ) \mathrm{ReLU}(x)=\max(x,0) ReLU(x)=max(x,0)
    在这里插入图片描述
  2. Sigmoid 激活函数,第二常用
    s i g m o i d ( x ) = 1 1 + exp ⁡ ( − x ) \mathrm{sigmoid}(x)=\frac{1}{1+\exp(-x)} sigmoid(x)=1+exp(x)1

在这里插入图片描述
3. Tanh 激活函数
tanh ⁡ ( x ) = 1 − exp ⁡ ( − 2 x ) 1 + exp ⁡ ( − 2 x ) \tanh(x)=\frac{1-\exp(-2x)}{1+\exp(-2x)} tanh(x)=1+exp(2x)1exp(2x)

在这里插入图片描述

2 代码实现

从零实现
简单实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rendy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值