小白的机器学习笔记系列 之六-神经网络

一. 什么是神经网络

神经网络的说法起源于人类大脑的结构,大概的意思是说在人类大脑里,神经元细胞互相连接传递信息素,构成了一张网络。

机器学习里的神经网络是是一种比喻的表达,形象的描述了在计算机程序中构造许多个计算节点,这些节点如同神经网络一般互相连接,用以解决复杂的问题。

神经网络解决问题的方式从数学角度可以这样来看。我们可以把要预测的问题看成一个非常复杂的函数,我们无法知道精确的知道这个函数究竟是什么样的,但是我们至少可以用一种近似的算法来拟合这个函数。

我们需要一个圆来区分两种类别,假设我们没有画圆的能力,于是我们可以用画切线的方法来拟合这个圆,随着切线的增加,我们对圆的拟合就越准确,但是我们永远无法用有限的切线来精确描述圆。将感知器想象成图中的切线,可以帮助我们大致的理解神经网的功能。
我们需要一个圆来区分两种类别,假设我们没有画圆的能力,于是我们可以用画切线的方法来拟合这个圆,随着切线的增加,我们对圆的拟合就越准确,但是我们永远无法用有限的切线来精确描述圆

二. 神经网络模型

我们使用之前章节讲过的逻辑回归模块来构造神经网络模型, 在逻辑回归模块的基础上,我们增加更多的逻辑回归感知器,构造一个中间层(如下图)。这个构造的层被称为隐藏层,输入数据被称为输入层,提供最后输出的层被称为输出层。

在这里插入图片描述
每一个输入值的权重为W,对于不同的感知器,每个参数可以有不同的权重。这有点像是每个感知器分布好像可以负责不同的属性。

比如在信用评估系统中,某个感知器负责审查收入,那么收入相关的参数对它来说就比较重要,权重也就比较大,其他信息如信用记录就比较次要,则权重值比较小。另外一个感知器专门负责审查信用度的,那么信用相关的输入获得的权重就会比较大,收入信息的权重比较小。最终这些不同感知器获得的评分汇总到输出层,获得一个最终的评估结果。
然而在实际的神经网络系统中,每个感知器并无法像我们之前描述的那样清晰的分工,每个感知器可能在不同维度上都有一定的作用, 实际上感知器之间所感知的维度很大程度上是非正交的 (如下图)。

感知器A,B, C都在信用记录和收入两个维度上有所作用,且非正交。
为了处理更加复杂的问题,我们加入了更加多的感知器,创建更多的隐藏层,这就如同在画圆时使用了更多的切线。在目前比较新的神经网络结构里,隐藏层的数量可以达到数百层,这就需要大量的算力来实现了。
在这里插入图片描述

三. 正向传播算法

神经网络再给出预测的时候是正向传播的, 每一个节点的输入是上一层的输出,每个节点的输出则是下一层的输入。

1. 输入层

即一组输入参数 X 1 = ( x 1 1 , x 1 2 , . . . , x i n ) X_1= (x_1^1, x_1^2, ..., x_i^n) X1=(x11,x12,...,xin) , 此处 x x x的下标是表示这是第一层输入参数,上标表示第几个输入参数。我们将输入参数组成一个向量 X 1 X_1 X1

2. 隐藏层

在i层上的输入是 X i − 1 = ( x i − 1 1 , x i − 1 2 , . . . , x i − 1 k ) X_{i-1} = (x_{i-1}^1,x_{i-1}^2, ..., x_{i-1}^k) Xi1=(xi11,xi12,...,xi1k),输出是 X i = ( x i − 1 1 , x i − 1 2 , . . . , x i − 1 m ) X_i = (x_{i-1}^1,x_{i-1}^2, ..., x_{i-1}^m) Xi=(xi11,xi12,...,xi1m)
X i = t a n h ( W i ∗ X i − 1 + b i ) X_i = tanh(W_i * X_{i-1} +b_i) Xi=tanh(WiXi1+bi)

  • 每个隐藏层有一组自己的权重值 W i W_i Wi和偏移值 b i b_i bi W i W_i Wi是一个 ( k , m ) (k,m) (k,m)的矩阵, b i b_i bi则是 m m m维的向量。
    k k k必须等于上一层的节点数(输入的个数), m m m则等于这一层的节点数,也是这一层的输出的个数。
  • 此处的 t a n h ( s ) = e s − e − s e s + e − s tanh(s) = \frac{e^s-e^{-s}}{e^s+e^{-s}} tanh(s)=es+eseses , 即逻辑回归中 θ ( s ) \theta(s) θ(s)的变形,亦被称为激活函数。
    使用这个激活函数的意义在于,如果我们只用 W i ∗ X i − 1 + b i W_i * X_{i-1} +b_i WiXi1+bi作为每一个节点的话,线性变化的输出到另外一个线性变化,那么整个系统依旧是线性的,其拟合功能是有限的, 激活函数意义就在于打破这种线性的关系,增加变化。
3. 输出层

输出层一般是使用一个逻辑回归函数的节点,用来获得输出一个概率值。对于多分类的神经网络,最常用的是softmax节点作为输出节点,以求获得每个分类的概率值,取概率最高的分类为结果。

所以从理论上来说,我们只要能有一组足够好的权重值和偏移值,我们既可以获得一个比较精确的输出结果。

四. 反向传播算法

反向传播算法是帮助我们来获得这组权重值和偏移值的方法。
具体步骤是:

  1. 首先随机产生一组权重值和偏移值
  2. 先做正向传播, 对于输入参数, 逐个算出每一层的输出值,直到最终输出结果。
  3. 比较正确的结果和输出结果, 计算其差异度,这个计算差异度的函数被称为损失函数,差异度称为损失(loss)。
  4. 根据损失函数,使用随机梯度下降算法最小化损失函数。此处的随机是指在求 e ( L o s s ( x n ) , y n ) e(Loss(x_n), y_n) e(Loss(xn),yn)时随机的选取一组 ( x n , y n ) (x_n, y_n) (xn,yn)。这样做的好处是计算量小,速度快,另外因为增加了随机性,也比较不容易让计算陷入到局部最小值。
  5. 从输出层开始逐层倒退的使用随机梯度下降算法,计算最大化的梯度,直到第一层节点 (输入层的下一层)。
  6. 更新整个网络的所有的权重值和偏移值。
  7. 重复以上步骤 1 - 6 直到输出结果的损失值足够小,即输出结果足够准确为止。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小白的逆袭日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值