美文网首页
多层感知机 MLP

多层感知机 MLP

作者: VictorHong | 来源:发表于2019-08-01 21:05 被阅读0次

多层感知机 MLP

何为多层感知机?

就是在简单的神经网络,只包括输入层和输出层的之间加入一层或者多层隐藏层,这样就是一个多层感知机的模型了。

如下图就是一个三层的多层感知机模型


mlp

如何计算MLP?

我们假设输入为X,在输入层与隐藏层的连线的权重是W1,隐藏层与输出层之间连线的权重是W2,输出为O,bia分别为b1与b2

那么我们的计算可以为:

H = XW_{1}+b_{1}
O = HW_{2}+b_{2}

当然如果这样就是MLP的话,那么你就错了,还差什么呢?

按照上面的运算,我们可以得到下面的计算结果

O = (XW_{1}+b_{1})W_{2}+b_{2} = XW_{1}W_{2}+b_{1}W_{2}+b_{2}

我们仔细看一下,其实我们并没有发生什么根本性的变化,只是我们的权重变成了W_{1}W_{2},bias变成了b_{1}W_{2}+b_{2}而已。

以上设计依然只能与仅含输出层的单层神经网络等价

解决办法:在隐藏层加入非线性激活函数

将非线性运算的结果作为下一个全连接层的输入

常见的激活函数有如下几种

首先定义一个画图函数

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

def xyplot(x_val,y_val,name):
    d2l.set_figsize(figsize=(5,2.5))
    d2l.plt.plot(x_val.asnumpy(),y_val.asnumpy())
    d2l.plt.xlabel('x')
    d2l.plt.ylabel(name+'(x)')

1. ReLU函数

\text{ReLU}(x) = \max(x, 0).

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

查看relu函数导数的图像

xyplot(x,x.grad,'grad of relu')
grad of relu

2. Sigmoid函数

\text{sigmoid}(x) = \frac{1}{1 + \exp(-x)}.

with autograd.record():
    y = x.sigmoid()
y.backward()
xyplot(x,y,'sigmoid')
sigmoid

查看sigmoid函数导数的图像

xyplot(x,x.grad,'grad of sigmoid')
sigmoid’s grad

3. tanh函数

\text{tanh}(x) = \frac{1 - \exp(-2x)}{1 + \exp(-2x)}.

with autograd.record():
    y = x.tanh()
y.backward()
xyplot(x,y,'tanh')
tanh

查看tanh函数的导数的图像

xyplot(x,x.grad,'grad of tanh')
tanh‘s grad

那么,最后让我们来总结以下多层感知机MLP把!

多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换。多层感知机的层数和各隐藏层中隐藏单元个数都是超参数。以单隐藏层为例并沿用本节之前定义的符号,多层感知机按以下方式计算输出:

\begin{split}\begin{aligned} \boldsymbol{H} &= \phi(\boldsymbol{X} \boldsymbol{W}_h + \boldsymbol{b}_h),\\ \boldsymbol{O} &= \boldsymbol{H} \boldsymbol{W}_o + \boldsymbol{b}_o, \end{aligned}\end{split}

其中 ϕ 表示激活函数。在分类问题中,我们可以对输出 O 做softmax运算,并使用softmax回归中的交叉熵损失函数。 在回归问题中,我们将输出层的输出个数设为1,并将输出 O 直接提供给线性回归中使用的平方损失函数。

相关文章

网友评论

      本文标题:多层感知机 MLP

      本文链接:https://www.haomeiwen.com/subject/zjqhdctx.html