美文网首页人工智能交流专栏神经网络
深度学习入门系列:感知机到神经网络

深度学习入门系列:感知机到神经网络

作者: 稻草人_d41b | 来源:发表于2018-08-24 17:38 被阅读85次

    前言

    感知机可以表示部分复杂函数,但是在设定权重的工作,确定能符合预期的输入与输出权重需要由人工进行,而神经网络可以自动从数据中学习到合适的权重参数

    1、从感知机到神经网络

    神经网络最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层。中间层有时也称为隐藏层。“隐藏”一词的意思是,隐藏层的神经元(和输入层、输出层不同)肉眼看不见。把输入层到输出层依次称为第0层、第1层、第2层。上图中,第0层对应输入层,第1层对应中间层,第2层对应输出层。

    1.1复习感知机

    感知机抽象后的数据函数如下:

    引用新函数改造感知机函数:

    输入信号的总和会被函数h(x)转换,转换后的值就是输出y。

    1.2激活函数登场

    上面感知机变形调整的函数h(x)会将输入信号的总和转换为输出信号,这种函数称为激活函数(activation function)。激活函数的作用在于决定如何来激活输入信号的总和。

    感知机数据公式可以改造由两部分构成:

    上图神经元的○中明确显示了激活函数的计算过程,即信号的加权总和为节点a,然后节点a被激活函数h()转换成节点y。

    2、激活函数

    从上面提到的激活函数可以看出激活函数以阈值为界,一旦输入超过阈值,就切换输出。这样的函数称为“阶跃函数”。

    2.1sigmoid函数

    函数中的exp(-x)表示e-X的意思。 e是纳皮尔常数2.7182 . . .。sigmoid函数看上去有些复杂,但它也仅仅是个函数而已。而函数就是给定某个输入后,会返回某个输出的转换器。比如,向sigmoid函数输入1.0或2.0后,就会有某个值被输出,类似h(1.0) = 0.731 . . .、 h(2.0) = 0.880 。

    sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化,图形如下:

    sigmoid函数

    2.2阶跃函数

    当输入超过0时,输出1,否则输出0。图像信息如下:

    2.3sigmoid函数和阶跃函数

    虚线是阶跃函数,实现是sigmoid函数  

    如图所示两个函数的不同点有:

    1、sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化。而阶跃函数以0为界,输出发生急剧性的变化。

    2、相对于阶跃函数只能返回0或1, sigmoid函数可以返回0.731 . . .、 0.880 . . .等实数。

    两者共同点:

    1、两者的结构均是“输入小时,输出接近0(为0);随着输入增大,输出向1靠近(变成1)”。即当输入信号为重要信息时,阶跃函数和sigmoid函数都会输出较大的值;当输入信号为不重要的信息时,两者都输出较小的值。

    2、不管输入信号有多小,或者有多大,输出信号的值都在0到1之间。

    3、两者均为非线性函数。sigmoid函数是一条曲线,阶跃函数是一条像阶梯一样的折线。

    2.4ReLU函数

    神经网络发展的历史上, sigmoid函数很早就开始被使用了,而最近则主要、使用ReLU(Rectifed Linear Unit)函数。ReLU函数在输入大于0时,直接输出该值;在输入小于等于0时,输出0。

    ReLU函数

    2.5神经网络激活函数要求

    神经网络的激活函数必须使用非线性函数而不能使用线性函数,因为线性函数的问题在于,不管如何加深层数,总是存在与之等效的“无隐藏层的神经网络”。比如:线性函数 h(x) = cx 作为激活函数,把y(x) = h(h(h(x)))的运算对应3层神经网络 A。这个运算会进行y(x) = c × c × c × x的乘法运算,但是同样的处理可以由y(x) = ax(注意,a = c3)这一次乘法运算(即没有隐藏层的神经网络)来表示。使用线性函数时,无法发挥多层网络带来的优势。为了发挥叠加层所带来的优势,激活函数必须使用非线性函数。

    神经网络计算:

    3、3层神经网络计算

    上图的3层神经网络:输入层(第0层)有 2个神经元,第1个隐藏层(第1层)有3个神经元,

    第2个隐藏层(第2层)有 2个神经元,输出层(第3层)有 2个神经元

    3.1符号说明

    3.2各层间信号传递的实现

    上图增加了表示偏置的神经元“1”。

    通过加权信号和偏置的和按如下方式进行计算下一层节点值:

    使用矩阵的乘法运算,则可以将第1层的加权和表示成下面

    其中, A(1)、 X、 B (1)、 W (1)如下所示:

    神经网络向向前运算过程如下:

    A1 = np.dot(X, W1) + B1

    Z1 = sigmoid(A1)

    隐藏层的加权和(加权信号和偏置的总和)用a表示,被激活函数转换后的信号用z表示。

    A2 = np.dot(Z1, W2) + B2

    Z2 = sigmoid(A2)

    A3 = np.dot(Z2, W3) + B3

    输出层使用激活函数得出最终结果。输出层所用的激活函数回归问题可以使用恒等函数,二元分类问题可以使用 sigmoid函数,多元分类问题可以使用 softmax函数。

    3.3恒等函数

    恒等函数会将输入按原样输出,对于输入的信息,不加以任何改动地直接输出。

    3.4softmax函数

    softmax函数可以计算得出每个结果所占的比例。exp(x)是表示ex的指数函数(e是纳皮尔常数2.7182 . . .)。假设输出层共有n个神经元,计算第k个神经元的输出yk。softmax函数的分子是输入信号ak的指数函数,分母是所有输入信号的指数函数的和。softmax函数的输出通过箭头与所有的输入信号相连,输出层的各个神经元都受到所有输入信号的影响。

    softmax函数的实现中要进行指数函数的运算,但是此时指数函数的值很容易变得非常大,容易造成溢出。

    改进后的softmax函数过程如下:

    在分子和分母上都乘上C这个任意的常数(因为同时对分母和分子乘以相同的常数,所以计算结果不变)。然后,把这个C移动到指数函数(exp)中,记为log C。最后,把log C替换为另一个符号C' 。为了防止溢出,一般会把C'使用输入信号中的最大值。

    softmax特性:

    函数的输出是0.0到1.0之间的实数。并且, softmax函数的输出值的总和是1。输出总和为1是softmax函数的一个重要性质。有了这个性质,才可以把softmax函数的输出解释为“概率”。

    相关文章

      网友评论

        本文标题:深度学习入门系列:感知机到神经网络

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