多层感知机(MLP)

什么是多层感知机

  • 多层感知机(MLP,Multilayer Perceptron)是一种前馈人工神经网络模型:在单层神经网络的基础上引入一个或多个隐藏层,使神经网络有多个网络层,并通过激活函数转换隐藏层的输出,因而称为多层感知机。
  • 多层感知机主要包括以下几个部分:
    输入层(Input Layer):输入层接收原始数据特征作为输入,每个输入神经元对应一个特征。输入层通常是网络的起始点。
    隐藏层(Hidden Layers):多层感知机中包含一个或多个隐藏层,这些层在输入层和输出层之间。每个隐藏层由多个神经元组成,可以具有不同数量的神经元。这些神经元通过权重和激活函数进行信息处理和传递。
    输出层(Output Layer):输出层通常用于产生网络的最终输出。输出层的神经元数量取决于任务的性质,例如,对于二元分类问题,通常有一个神经元,对于多类分类问题,通常有多个神经元。

  • 图中显示,输入个数为3,输出个数为2,中间的隐藏层中包含了4个隐藏单元(hidden unit)。由于输入层不涉及计算,所以图中的多层感知机的层数为2
  • 由图可知,隐藏层中的神经元和输入层中各个输入完全连接,输出层中的神经元和隐藏层中的各个神经元也完全连接。因此多层感知机中的隐藏层和输出层都是全连接层。每个输入都会影响隐藏层中的每个神经元,而隐藏层中的每个神经元又会影响输出层中的每个神经元。

激活函数

  • 定义:激活函数是一种在神经网络中的每个节点(或称为神经元)上应用的函数,它决定该节点是否应该被"激活"。换句话说,激活函数定义了节点的输出与其输入之间的关系。它通常是非线性的,为神经网络提供了模拟非线性函数的能力。

为什么要使用激活函数

  • 如果没有激活函数,无论神经网络有多少层,它总是表示一个线性函数。这是因为线性函数的多次叠加仍然是线性的。通过引入非线性激活函数,神经网络可以表示更复杂的、非线性的函数。
  • 更丰富的模型:非线性激活函数增加了模型的表示能力,使其能够捕捉到数据中更复杂的模式和关系。
  • 模拟生物神经元的行为:生物神经元有一种阈值机制:只有当输入信号的强度超过一定的阈值时,神经元才会被激活。激活函数在某种程度上模仿了这种行为。

激活函数要具备的特征

  • 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数。
  • 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
  • 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。

常见的激活函数

  • Sigmoid
    Sigmoid函数可以将元素和值变换到0和1之间,sigmoid(x)=1/(1 + exp(-x));
  • ReLU 函数
    Rectified Linear Unit(修正线性单元)提供了一种简单的非线性变换,给定元素x,则函数定义为:ReL(x) = max(x, 0),它将负数元素清零,只保留整数元素;
  • tanh
    tanh(双曲正切)函数将元素的值变换到-1和1之间,tanh(x)=(1-exp(-2x))/(1+exp(-2x)),当输入接近0时,tanh函数接近线性变换;
  • Leaky ReLU:为了解决ReLU中的“死神经元”问题,当x小于0时,有一个小的正斜率。

三层的MLP代码

#3层的MLP
class MLP(object):
    def __init__(self, rng, input, n_in, n_hidden, n_out):
        
        self.hiddenLayer = HiddenLayer(
            rng=rng,
            input=input,
            n_in=n_in,
            n_out=n_hidden,
            activation=T.tanh
        )
 
#将隐含层hiddenLayer的输出作为分类层logRegressionLayer的输入,这样就把它们连接了
        self.logRegressionLayer = LogisticRegression(
            input=self.hiddenLayer.output,
            n_in=n_hidden,
            n_out=n_out
        )
 
 
#以上已经定义好MLP的基本结构,下面是MLP模型的其他参数或者函数
 
#规则化项:常见的L1、L2_sqr
        self.L1 = (
            abs(self.hiddenLayer.W).sum()
            + abs(self.logRegressionLayer.W).sum()
        )
 
        self.L2_sqr = (
            (self.hiddenLayer.W ** 2).sum()
            + (self.logRegressionLayer.W ** 2).sum()
        )
 
 
#损失函数Nll(也叫代价函数)
        self.negative_log_likelihood = (
            self.logRegressionLayer.negative_log_likelihood
        )
 
#误差      
        self.errors = self.logRegressionLayer.errors
 
#MLP的参数
        self.params = self.hiddenLayer.params + self.logRegressionLayer.params
        # end-snippet-3

参考链接:
多层感知机(MLP)简介博客
多层感知机是什么

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值