多层感知机 MLP
何为多层感知机?
就是在简单的神经网络,只包括输入层和输出层的之间加入一层或者多层隐藏层,这样就是一个多层感知机的模型了。
如下图就是一个三层的多层感知机模型
如何计算MLP?
我们假设输入为X,在输入层与隐藏层的连线的权重是W1,隐藏层与输出层之间连线的权重是W2,输出为O,bia分别为b1与b2
那么我们的计算可以为:
当然如果这样就是MLP的话,那么你就错了,还差什么呢?
按照上面的运算,我们可以得到下面的计算结果
我们仔细看一下,其实我们并没有发生什么根本性的变化,只是我们的权重变成了,bias变成了而已。
以上设计依然只能与仅含输出层的单层神经网络等价
解决办法:在隐藏层加入非线性激活函数
将非线性运算的结果作为下一个全连接层的输入
常见的激活函数有如下几种
首先定义一个画图函数
%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函数
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函数导数的图像
xyplot(x,x.grad,'grad of relu')
2. Sigmoid函数
with autograd.record():
y = x.sigmoid()
y.backward()
xyplot(x,y,'sigmoid')
查看sigmoid函数导数的图像
xyplot(x,x.grad,'grad of sigmoid')
3. tanh函数
with autograd.record():
y = x.tanh()
y.backward()
xyplot(x,y,'tanh')
查看tanh函数的导数的图像
xyplot(x,x.grad,'grad of tanh')
那么,最后让我们来总结以下多层感知机MLP把!
多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换。多层感知机的层数和各隐藏层中隐藏单元个数都是超参数。以单隐藏层为例并沿用本节之前定义的符号,多层感知机按以下方式计算输出:
其中 ϕ 表示激活函数。在分类问题中,我们可以对输出 O 做softmax运算,并使用softmax回归中的交叉熵损失函数。 在回归问题中,我们将输出层的输出个数设为1,并将输出 O 直接提供给线性回归中使用的平方损失函数。