L
O
A
D
I
N
G

神经网络学习笔记Day1——基础知识


神经网络

参考链接:

神经网络15分钟入门!足够通俗易懂了吧 - 知乎 (zhihu.com)

任务背景

如下图,我们已知四个数据点(1,1)(-1,1)(-1,-1)(1,-1),这四个点分别对应I~IV象限,如果这时候给我们一个新的坐标点(比如(2,2)),那么它应该属于哪个象限呢?(没错,当然是第I象限,但我们的任务是要让机器知道)

“分类”是神经网络的一大应用,我们使用神经网络完成这个分类任务。

两层神经网络

理论上可以拟合任意函数(万能近似定理),结构如下:

1.简化的两层神经网络

1.1输入层

输入元素的维度和输入量的特征息息相关,如果输入一张32*32的灰度图像,那么输入层的维度就是32*32;如果输入的是一个二维坐标值,如(1, 1),那么输入维度就是1*2。

1.2从输入层到隐藏层

输入层和隐藏层之间由W1和b1连接,计算方式为:

H=X*W1+b1

1.3从隐藏层到输出层

连接隐藏层和输出层的是W2和b2,计算方式为:

Y=H*W2+b2

1.4分析

根据线性代数的知识,可知:一系列线性方程的运算最终都可以用一个线性方程表示

因此,上述两个式子联立后可以用一个线性方程表示,并且就算网络深度再增加,结果也是一样,如此一来神经网络就失去了意义。

为了改变这一局面,需要使用网络的灵魂组件:激活层

2.激活层

激活层的作用是为矩阵运算添加非线性成分。常用激活函数有三种:阶跃函数SigmoidReLU。对应的函数曲线如下图所示:

  • 阶跃函数
    $$
    y= \begin{cases} 0 & \text{if } x \leq 0
    \\ 1 & \text{if } x > 0 \end{cases}
    $$
  • Sigmoid:输入接近 $\infty$ ,输出趋向1;输入接近$-\infty$ ,输出趋向0
  • ReLU:
    $$
    y=\begin{cases} 0 & \text{if } x <0
    \\ x & \text{if } x \geq0 \end{cases}
    $$

阶跃函数的输出是跳变的,使用较少;Sigmoid在x的绝对值较大时,曲线斜率变化很小,出现梯度消失,并且计算复杂;ReLU是当前较为常用的激活函数。

每个隐藏层计算(矩阵线性运算)之后,都需要加一层激活层,否则该线性层的计算是没有意义的

加上激活层后的两层神经网络如下图:

神经网络分为“训练”和“使用”两个步骤,上图已经完成了“使用”步骤的全部内容。在求得的Y矩阵中,数值最大的就代表当前的分类。

但是对于“训练”网络来说,当前输出的Y还远远不够。

3.输出正规化

在上面的输出层中,输出的内容并不规范,可能是任何数字。为了让最终的输出的概率,需要进行进一步转化。

计算公式如下:

$S_i = \frac{e^i}{\sum_j{e^j}}$

简单来说分三步:

  • 以e为底对所有元素求指数幂
  • 将所有指数幂求和
  • 分别将这些指数幂与该和做商

这一正规化处理的层叫做Softmax层,此时神经网络如下图所示:

img

4.输出好坏的衡量方式

Softmax的输出结果与真实结果存在一定差距,例如输出的结果是(90%,5%,3%,2%),真实的结果是(100%,0,0,0)。优秀的神经网络对结果的预测要无限接近于100%,因此需要对Softmax输出结果的好坏进行量化。

可以使用一种直观的量化方式:用1减去Softmax输出的概率,例如1-90%=0.1。但更为常用且巧妙的方法是,求对数的负数。例如90%对数的负数就是$-log0.9=0.046$。

这个值就是交叉熵损失,概率越接近于100%,这个值越接近0。训练神经网络最终的目的就是尽可能减少“交叉熵损失”。

此时的网络如下图:

5.反向传播与参数优化

前面4节讲了神经网络的正向传播过程,总结如下:

神经网络的传播都是形如Y=WX+b的矩阵运算;为了给矩阵运算加入非线性,需要在隐藏层中加入激活层;输出层结果需要经过Softmax层处理为概率值,并通过交叉熵损失来量化当前网络的优劣。

算出交叉熵损失后,就要进行反向传播,这一过程就是参数优化的过程,优化对象是网络中所有的W和b(因为其它参数均确定)。

神经网络的奇妙之处就在于,它可以自动做W和b的优化,在深度学习中,参数的数量有时会以亿记,但其优化原理和这个两层的神经网络是相同的。

这里举一个形象的例子描述一下这个参数优化的原理和过程:

假设我们操纵着一个球型机器行走在沙漠中

img

我们在机器中操纵着四个旋钮,分别叫做W1,b1,W2,b2。当我们旋转其中的某个旋钮时,球形机器会发生移动,但是旋转旋钮大小和机器运动方向之间的对应关系是不知道的。而我们的目的就是走到沙漠的最低点

img

此时我们该怎么办?只能挨个试喽。

如果增大W1后,球向上走了,那就减小W1。

如果增大b1后,球向下走了,那就继续增大b1。

如果增大W2后,球向下走了一大截,那就多增大些W2。

。。。

这就是进行参数优化的形象解释(有没有想到求导?),这个方法叫做梯度下降法

当我们的球形机器走到最低点时,也就代表着我们的交叉熵损失达到最小(接近于0)。

6.迭代

神经网络需要反复迭代。

每次计算得到一组概率和交叉熵损失值,将该损失值反向传播,使W1,b1,W2,b2做相应微调;再做第二次运算,和第一次操作相同。最红损失值越来越小,直到达到预期效果。

迭代完成后我们就得到了理想的W1,b1,W2,b2。

此时将任意一组坐标输入,利用最终的神经网络,就能得到分类结果。


文章作者: 叁月柒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 叁月柒 !
评论
  目录