YB菜菜的机器学习自学之路(六)——初步了解简单的神经网络模型(隐藏层)

YB菜菜的机器学习自学之路(六)——初步了解简单的神经网络模型(隐藏层)

  • 前提说明
  • 1.神经网络模型
    • 1.1 三神经元构成的神经网络案例
    • 1.2 隐藏层
  • 2. 步骤概述

前提说明

在先前的模型分类中,可以用单调的函数就能够表示(或,单一神经元模型),如图1所示。
YB菜菜的机器学习自学之路(六)——初步了解简单的神经网络模型(隐藏层)_第1张图片
图1

实际上,随着种类的增多,数据的模型变得复杂,如图2,此时理论上我们要的得到的模型应该是一个有低有高的曲线,即预测模型将不再是单调函数。而单一的激活函数中,函数曲线始终保持单调,这是无法满足需求的。
YB菜菜的机器学习自学之路(六)——初步了解简单的神经网络模型(隐藏层)_第2张图片
图2
因此需要多增加新的神经元,使得模型形成一个神经网络,来实现这种非单调的预测模型。
这里以图2为输入数据,通过增加2个神经元获得一个先单调声再单调减的预测模型来了解神经网络模型以及相关的概念。

1.神经网络模型

1.1 三神经元构成的神经网络案例

YB菜菜的机器学习自学之路(六)——初步了解简单的神经网络模型(隐藏层)_第3张图片
图3

为了实现图2中的数据预测模型,我们使用图3的神经网络架构。如图3,相比之前的模型增加了2个额外的神经元从而形成一个网络,使得达到想要的预测模型。

将三个神经元分成2层,对于第一层中的每个神经元(1_1和1_2),先通过线性函数计算再通过激活函数得到输出,利用梯度下降算法,那么第一层的神经元的输出一定可以形成单调曲线,如图3中的 a 1 _ 1 a_{1\_1} a1_1 a 1 _ 2 a_{1\_2} a1_2
接着将这两个神经元的输出作为第三个神经元(2_1)的输入,先通过第三个神经元的线性函数计算和乘以权重的计算,那么得到的融合后的结果必然不再是单调曲线了。再通过激活函数和梯度下降将最终的结果调节成我们想要的样子( a 2 _ 1 a_{2\_1} a2_1)。

也就是把输入分为两个部分,分别对两个部分调节,让整个神经网络形成一个单调性不唯一的更多变函数,从而具备解决更复杂问题的能力

在图中, w 、 b w、b wb是参数,其中 w w w是权重因子, w 11 _ 1 w_{11\_1} w11_1表示第一层的第一个输入参数在第一个神经元的第一个权重(在这里我们只有一个输入), b b b是线性函数的权重,通过为了使得网络图简洁,可以忽略不画出来。在这里 a a a表示某一个神经元的输出, a 1 _ 1 a_{1\_1} a1_1表示第一层第一个神经元的输出。

1.2 隐藏层

YB菜菜的机器学习自学之路(六)——初步了解简单的神经网络模型(隐藏层)_第4张图片
图4

将图3简化,形成图4.整个过程可以理解为:
每增加一个神经元,相当于增加了一个抽象维度,把输入放入这些不同的维度中,每个维度通过不断地调整权重并进行激活,从而产生对输入的不同理解,最后再把这些抽象的维度的输出融合并降维得到最终输出。数据在多个抽象维度中产生不同的解读从而让输出得到更多的可能,从而实现更多更加复杂的分类。

在这一过程中,中间所添加的神经元节点被称之为隐藏层
隐藏层的神经元越多那么产生的组合越多,从而可以解决越复杂的分类问题,当然计算量也随之增加。

图4中是在横向上增加神经元,构成一层隐藏层。也可以在纵向上增加神经元,如图5所示,产生更深的隐藏层。更多、更深的隐藏层使得神经网络模型通过不断地迭代训练找到合适的参数,就可以解决更复杂的问题。最终网络输出的结果则是根据采集的训练数据决定的,采集的数据越多越充足,则最终结果就能越好的去预测问题,因此机器学习的根基是海量的数据。
一个训练之后拟合适当的模型在遇到新的问题数据时也能大概率产生正确的预测,这个现象称为模型泛化

YB菜菜的机器学习自学之路(六)——初步了解简单的神经网络模型(隐藏层)_第5张图片
图5

深度学习:只是指一个神经网络中纵向的隐藏层很多,一般把隐藏层超过3层的网络称为深度神经网络
然而在实际的训练中,大部分情况我们只能去设计这个网络,送入数据去训练,如果训练效果好,就表明对了,如果不好,那么就调整参数重来。而其中,隐藏层是怎么去理解问题的,在具体干什么、提取了什么参数是很难有精确数学去描述的,因此就像是在炼丹

2. 步骤概述

(1)构建前向传播

#前向传播
def forward_function(xs):
    # 第一层第一个神经元输出
    Z1_1 = w11_1*xs+b1_1
    a1_1 = sigmoid(Z1_1)
    # 第一层第二个神经元输出
    Z2_1 = w21_1*xs+b2_1
    a2_1 = sigmoid(Z2_1)
    # 第二层 神经元输出
    Z1_2 = a1_1*w11_2+a2_1*w21_2+b1_2
    a1_2  = sigmoid(Z1_2)
    return  a1_2,Z1_2,a2_1, Z2_1,a1_1,Z1_1

(2)误差代价函数

e = (y-a1_2)**2

(3)梯度下降(反向传播)

        #梯度调参
        w11_1 = w11_1 - alpha * dedw11_1
        b1_1 = b1_1 - alpha * dedb1_1
        w21_1 = w21_1 - alpha * dedw21_1
        b2_1 = b2_1 - alpha * dedb2_1
        w11_2 = w11_2 - alpha * dedw11_2
        w21_2 = w21_2 - alpha * dedw21_2
        b1_2 = b1_2 - alpha * dedb1_2

(4)结果
YB菜菜的机器学习自学之路(六)——初步了解简单的神经网络模型(隐藏层)_第6张图片
图6 结果输出

你可能感兴趣的:(机器学习,神经网络,人工智能)