深度学习基础(基础知识0)

事实上,各类网络的深入学习是建立在各类基础知识积累的基础上的。今天,我主要想把这三点讲清楚:梯度下降、神经网络、反向传播算法。

[En]

In fact, in-depth learning of all kinds of networks is based on the accumulation of all kinds of basic knowledge. Today, I mainly want to explain these three clearly: gradient descent, neural network, back propagation algorithm.

神经网络(万物的基石)

[En]

Neural network (the cornerstone of everything)

工智能的底层模型是“神经网络”(neural network)。许多复杂的应用(比如模式识别、自动控制)和高级模型(比如深度学习)都基于它。学习人工智能,一定是从它开始。

深度学习基础(基础知识0)

什么是神经网络?

[En]

What is a neural network?

1、感知器

从历史上看,科学家们一直想要模拟人类的大脑,建造能够思考的机器。为什么人们会思考?科学家发现,原因在于人体的神经网络。

[En]

Historically, scientists have wanted to simulate the human brain and build machines that can think. Why can people think? Scientists have found that the reason lies in the neural network of the human body.

深度学习基础(基础知识0)

既然思考的基础是神经元,如果能够”人造神经元”(artificial neuron),就能组成人工神经网络,模拟思考。上个世纪六十年代,提出了最早的”人造神经元”模型,叫做“感知器”(perceptron),直到今天还在用。

深度学习基础(基础知识0)

上图的圆圈就代表一个感知器。它接受多个输入(x1,x2,x3…),产生一个输出(output),好比神经末梢感受各种外部环境的变化,最后产生电信号。

为了简化模型,我们同意每个输入只有两种可能:1或0。如果所有输入都为1,则意味着所有条件都为真,输出为1;如果所有输入都为0,则条件不为真,输出为0。

[En]

To simplify the model, we agree that there are only two possibilities for each input: 1 or 0. If all the inputs are 1, it means that all the conditions are true, the output is 1; if all the inputs are 0, the condition is not true, the output is 0.

2、感知器的例子

让我们来看一个例子。该市正在举办一年一度的游戏动漫展,肖明拿不定主意周末要不要去参观。

[En]

Let’s look at an example. The annual game animation exhibition is being held in the city, and Xiao Ming can’t make up his mind whether to visit it on the weekend.

深度学习基础(基础知识0)

他决定考虑三个因素。

[En]

He decided to consider three factors.

这就构成一个感知器。上面三个因素就是外部输入,最后的决定就是感知器的输出。如果三个因素都是 Yes(使用 1表示),输出就是1(去参观);如果都是 No(使用 0表示),输出就是0(不去参观)。

3、权重和阈值

当你看到这一点时,你一定会问:如果一些因素是真的,另一些因素不是,那么产出是什么?比如周末没问题,门票也不贵,但肖明找不到伴儿,还想去吗?

[En]

When you see this, you must ask: if some factors are true and other factors are not, what is the output? For example, the weekend is fine and the tickets are not expensive, but Xiao Ming can’t find a companion, so does he still want to visit?

现实中,各种因素很少具有同等重要性:某些因素是决定性因素,另一些因素是次要因素。因此,可以给这些因素指定权重(weight),代表它们不同的重要性。

上述权重表明,天气是决定性因素,同伴和价格是次要因素。

[En]

The above weight indicates that the weather is the decisive factor, while companion and price are secondary factors.

如果三个因素都为1,它们乘以权重的总和就是 8 + 4 + 4 = 16。如果天气和价格因素为1,同伴因素为0,总和就变为 8 + 0 + 4 = 12。

这时,还需要指定一个阈值(threshold)。如果总和大于阈值,感知器输出1,否则输出0。假定阈值为8,那么 12 > 8,小明决定去参观。阈值的高低代表了意愿的强烈,阈值越低就表示越想去,越高就越不想去。

上述决策过程的数学表达如下。

[En]

The above decision-making process is expressed mathematically as follows.

深度学习基础(基础知识0)

上面公式中, x表示各种外部因素, w表示对应的权重。

4、决策模型

一个感知器就构成了一个已经可以使用的简单决策模型。在现实世界中,实际的决策模型要复杂得多,它是一个由多个感知器组成的多层网络。

[En]

A single perceptron makes up a simple decision model that can already be used. In the real world, the actual decision-making model is much more complex, which is a multi-layer network composed of multiple perceptrons.

深度学习基础(基础知识0)

在上图中,底部感知器接收外部输入,进行判断,然后发送信号作为上部感知器的输入,直到获得最终结果。(注:感知器仍然只有一个输出,但它可以发送到多个目标。)

[En]

In the image above, the bottom perceptron receives the external input, makes a judgment, and then sends a signal as the input of the upper perceptron until the final result is obtained. (note: there is still only one output from the perceptron, but it can be sent to multiple targets. )

这张图里,信号都是单向的,即下层感知器的输出总是上层感知器的输入。现实中,有可能发生循环传递,即 A 传给 B,B 传给 C,C 又传给 A,这称为“递归神经网络”(recurrent neural network),本文不涉及。

深度学习基础(基础知识0)

5、矢量化

为了便于后面的讨论,需要对上述模型进行一些数学处理。

[En]

In order to facilitate the later discussion, some mathematical processing of the above model is needed.

感知器模型是这样的。

[En]

The perceptron model becomes like this.

深度学习基础(基础知识0)

6、神经网络的运作过程

构建神经网络需要满足三个条件。

[En]

The construction of a neural network needs to meet three conditions.

换句话说,你需要提前画出上面的图画。

[En]

In other words, you need to draw the picture above in advance.

深度学习基础(基础知识0)

其中,最困难的部分就是确定权重( w)和阈值( b)。目前为止,这两个值都是主观给出的,但现实中很难估计它们的值,必需有一种方法,可以找出答案。

这种方法就是试错法。其他参数都不变, w(或 b)的微小变动,记作 Δw(或 Δb),然后观察输出有什么变化。不断重复这个过程,直至得到对应最精确输出的那组 wb,就是我们要的值。这个过程称为模型的训练。

深度学习基础(基础知识0)

因此,神经网络的运行方式如下。

[En]

Therefore, the operation of the neural network is as follows.

  1. 确定输入和输出
  2. 找到一种或多种算法,可以从输入得到输出
  3. 找到一组已知答案的数据集,用来训练模型,估算 wb
  4. 一旦新的数据产生,输入模型,就可以得到结果,同时对 wb进行校正

可以看到,整个过程需要海量计算。所以,神经网络直到最近这几年才有实用价值,而且一般的 CPU 还不行,要使用专门为机器学习定制的 GPU 来计算。

7、神经网络的例子

下面是一个车牌自动识别的例子来解释神经网络。

[En]

The following is an example of automatic license plate recognition to explain the neural network.

深度学习基础(基础知识0)

所谓”车牌自动识别”,就是高速公路的探头拍下车牌照片,计算机识别出照片里的数字。

深度学习基础(基础知识0)

这个例子里面,车牌照片就是输入,车牌号码就是输出,照片的清晰度可以设置权重( w)。然后,找到一种或多种图像比对算法,作为感知器。算法的得到结果是一个概率,比如75%的概率可以确定是数字 1。这就需要设置一个阈值( b)(比如85%的可信度),低于这个门槛结果就无效。

将识别出的一组车牌照片作为训练集数据来输入模型。不断调整各种参数,直到找到精度最高的参数组合。当你得到新的照片时,你可以直接给出结果。

[En]

A set of identified license plate photos are used as training set data to input the model. Constantly adjust various parameters until the combination of parameters with the highest accuracy is found. When you get the new photos, you can give the results directly.

深度学习基础(基础知识0)

8、输出的连续性

上面的模型有一个问题没有解决,按照假设,输出只有两种结果:0和1。但是,模型要求 wb的微小变化,会引发输出的变化。如果只输出 01,未免也太不敏感了,无法保证训练的正确性,因此必须将”输出”改造成一个连续性函数。

这需要进行一些简单的数学修改。

[En]

This requires a little simple mathematical modification.

首先,将感知器的计算结果 wx + b记为 z

然后,计算下面的式子,将结果记为 σ(z)

这是因为如果 z趋向正无穷 z → +∞(表示感知器强烈匹配),那么 σ(z) → 1;如果 z趋向负无穷 z → -∞(表示感知器强烈不匹配),那么 σ(z) → 0。也就是说,只要使用 σ(z)当作输出结果,那么输出就会变成一个连续性函数。

原始输出曲线如下所示。

[En]

The original output curve is as follows.

深度学习基础(基础知识0)

现在是这样的。

[En]

Now it’s like this.

深度学习基础(基础知识0)

实际上,还可以证明 Δσ满足下面的公式。

深度学习基础(基础知识0)

ΔσΔwΔb之间是线性关系,变化率是偏导数。这就有利于精确推算出 wb的值了。

这里可以看到Sigmoid 函数是使用深度学习范围最广的一类激活函数,具有指数函数形状 。正式定义为:

深度学习基础(基础知识0)

在深度学习中,信号从一个神经元传入到下一层神经元之前是通过线性叠加来计算的,而进入下一层神经元需要经过非线性的激活函数,继续往下传递,如此循环下去。由于这些非线性函数的反复叠加,才使得神经网络有足够的capacity来抓取复杂的特征。

为什么要使用非线性激活函数?

[En]

Why use nonlinear activation functions?

答:如果不使用激活函数,这种情况下每一层输出都是上一层输入的线性函数。无论神经网络有多少层,输出都是输入的线性函数,这样就和只有一个隐藏层的效果是一样的。这种情况相当于多层感知机(MLP)。

具体参考:http://www.360doc.com/content/17/1102/21/1489589_700400500.shtml

二、梯度下降和ANN—人工神经元网络训练

ANN网络:输入层/输入神经元,输出层/输出神经元,隐层/隐层神经元,权值,偏置,激活函数

ANN网络训练过程:

假设ANN网络已经搭建好了,在所有应用问题中(不管是网络结构,训练手段如何变化)我们的目标是不会变的,那就是网络的权值和偏置最终都变成一个最好的值,这个值可以让我们由输入可以得到理想的输出,于是问题就变成了y=f(x,w,b)(x是输入,w是权值,b为偏置)

最后的目标就变成了尝试不同的w,b值,使得最后的y=f(x)无限接近我们希望得到的值t,也就是让loss最小,loss可以用(y-t)^2的值尽可能的小。于是原先的问题化为了C(w,b)=(f(x,w,b)-t)^2取到一个尽可能小的值。这个问题不是一个困难的问题,不论函数如何复杂,如果C降低到了一个无法再降低的值,那么就取到了最小值(假设我们不考虑局部最小的情况)。

梯度下降法是最快的求解方法。

[En]

The gradient descent method is the fastest solution.

网络权值偏置更新问题 ==> f(x,w,b)的结果逼近t ==> C(w,b)=(f(x,w,b)-t)^2取极小值问题 ==> C(w,b)按梯度下降问题 ==>取到极小值,网络达到最优。

推导的前提是我们事先已经知道当前点的坡度。但事实是,我们不知道。

[En]

The derivation is based on the premise that we already know the gradient of the current point in advance. But the truth is, we don’t know.

那么该如何解决呢?

[En]

So how to solve it?

三、反向传播方法更新权重矩阵求下降梯度

为什么要用反向传播?

主要是训练过程中,我们知道了输入和输出和groudtruth最后的真实结果,那么我们可以根据真实的结果-output得到误差值,再反向去推导前一层的误差,这样就可以更新我们的W 和B,比单纯的梯度下降去慢慢穷举一个个试试,速度快多了。

因此,步骤如下:

[En]

So the steps are:

step1、前向传播:

1.输入层—->隐含层:

计算神经元h1的输入加权和,神经元h1的输出o1:(此处用到激活函数为sigmoid函数),同理,可计算出神经元h2的输出o2。

2.隐含层—->输出层:

计算输出层神经元o1和o2的值。

这样前向传播的过程就结束了,我们得到输出值为[0.75136079 , 0.772928465],与实际值[0.01 , 0.99]相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。

Step 2 反向传播

1.计算总误差

总误差:(square error)。真实值-output

2.隐含层—->输出层的权值更新:

以权重参数w5为例,如果我们想知道w5对整体误差产生了多少影响,可以用整体误差对w5求偏导求出:(链式法则),算出整体误差E(total)对w5的偏导值。

最后我们来更新w5的值。同理可更新w6,w7,w8。

3.隐含层—->隐含层的权值更新:

方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)—->net(o1)—->w5,但是在隐含层之间的权值更新时,是out(h1)—->net(h1)—->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。

这样误差反向传播法就完成了,最后我们再把更新的权值重新计算,不停地迭代,在这个例子中第一次迭代之后,总误差E(total)由0.298371109下降至0.291027924。迭代10000次后,总误差为0.000035085,输出为0.015912196,0.984065734,证明效果还是不错的。

1、反向传播的原理

首先,有两件事需要牢记:

[En]

First, there are two things to keep in mind:

1.反向传播算法告诉我们当我们改变权值(weights)和偏置(biases)的时候,损失函数改变的速度。
2.反向传播也告诉我们如何改变权值和偏置以改变神经网络的整体表现。

2.一个很好的例子

假设您有一个如下所示的网络层:

[En]

Suppose you have a network layer like this:

深度学习基础(基础知识0)

第一层是输入层,包含两个神经元i1,i2,和截距项b1;第二层是隐含层,包含两个神经元h1,h2和截距项b2,第三层是输出o1,o2,每条线上标的wi是层与层之间连接的权重,激活函数我们默认为sigmoid函数。

现在给它们一个初始值,如下图所示:

[En]

Now give them an initial value, as shown in the following figure:

深度学习基础(基础知识0)

其中,输入数据 i1=0.05,i2=0.10;

输出数据 o1=0.01,o2=0.99;

初始权重 w1=0.15,w2=0.20,w3=0.25,w4=0.30;

w5=0.40,w6=0.45,w7=0.50,w8=0.88

目标:给出输入数据i1,i2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。

Step 1 前向传播

1.输入层—->隐含层:

计算神经元h1的输入加权和:

深度学习基础(基础知识0)

神经元h1的输出o1:(此处用到激活函数为sigmoid函数):

深度学习基础(基础知识0)

同理,可计算出神经元h2的输出o2:

深度学习基础(基础知识0)

2.隐含层—->输出层:

计算输出层神经元o1和o2的值:

深度学习基础(基础知识0)

这样前向传播的过程就结束了,我们得到输出值为[0.75136079 , 0.772928465],与实际值[0.01 , 0.99]相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。

Step 2 反向传播

1.计算总误差

总误差:(square error)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

2.隐含层—->输出层的权值更新:

深度学习基础(基础知识0)

下图更直观地显示了错误是如何反向传播的:

[En]

The following diagram gives a more intuitive view of how the error is backpropagated:

现在让我们分别计算每个公式的值:

[En]

Now let’s calculate the value of each formula separately:

深度学习基础(基础知识0)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

(这一步实际上就是对sigmoid函数求导,比较简单,可以自己推导一下)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

后三项相乘:

[En]

The last three are multiplied:

深度学习基础(基础知识0)

这样我们就计算出整体误差E(total)对w5的偏导值。

回顾上面的公式,我们发现:

[En]

Looking back at the above formula, we find that:

深度学习基础(基础知识0)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

因此,整体误差E(total)对w5的偏导公式可以写成:

深度学习基础(基础知识0)

如果输出层误差为负,则也可以写为:

[En]

If the output layer error is negative, it can also be written as:

深度学习基础(基础知识0)

最后我们来更新w5的值:

深度学习基础(基础知识0)

深度学习基础(基础知识0)

同理,可更新w6,w7,w8:

深度学习基础(基础知识0)

3.隐含层—->隐含层的权值更新:

方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)—->net(o1)—->w5,但是在隐含层之间的权值更新时,是out(h1)—->net(h1)—->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。

深度学习基础(基础知识0)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

以同样的方式,计算:

[En]

By the same token, calculate:

深度学习基础(基础知识0)

两者的总价值如下:

[En]

The total value of the two is as follows:

深度学习基础(基础知识0)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

深度学习基础(基础知识0)

最后,将这三项相乘:

[En]

Finally, multiply the three:

深度学习基础(基础知识0)

为了简化公式,用sigma(h1)表示隐含层单元h1的误差:

深度学习基础(基础知识0)

最后,更新w1的权值:

深度学习基础(基础知识0)

同理,额可更新w2,w3,w4的权值:

深度学习基础(基础知识0)

这样误差反向传播法就完成了,最后我们再把更新的权值重新计算,不停地迭代,在这个例子中第一次迭代之后,总误差E(total)由0.298371109下降至0.291027924。迭代10000次后,总误差为0.000035085,输出为0.015912196,0.984065734,证明效果还是不错的

3、算法步骤

前向传递输入信号,直到输出产生误差,并且误差信息被反向传播以更新权重矩阵。

[En]

Forward transfer the input signal until the output produces an error, and the error information is backpropagated to update the weight matrix.

BP算法是深度学习中的一种训练和学习方法,用于调整深度网络中每个节点的权值,使网络输出的样本标签与实际标签一致。本文将对反向传播算法的实现细节进行总结。

[En]

Back propagation algorithm is a training and learning method in deep learning, which is used to adjust the weight of each node in the deep network, so that the sample label of the network output is consistent with the actual label. This paper will summarize the implementation details of the backpropagation algorithm.

反向传播算法是通过反向传播输出层的误差来调整权值。如图1所示,具有1个隐藏层的网络在输入层中有2个节点,在隐藏层中有3个节点,在输出层中有2个节点。

[En]

The backward propagation algorithm is to propagate the error of the output layer backward to adjust the weight. As shown in figure 1, a network with 1 hidden layer has 2 nodes in the input layer, 3 nodes in the hidden layer and 2 nodes in the output layer.

深度学习基础(基础知识0)

图1 示例网络

后向传播的实现细节如下:

[En]

The implementation details of backward propagation are as follows:

深度学习基础(基础知识0)

下面给出了一个计算实例:

[En]

An example of calculation is given below:

如图2为一个简单的网络

图2 样例网络

假设目标输出为0.5,即target=0.5,则按照以上的方法计算如下:
1.计算各节点的值与激活值
a.隐藏层最顶端节点:(0.35×0.1)+(0.9×0.8)=0.755;
节点输出:out=sigmoid(0.755)=0.68;
b.隐藏层最低端节点:(0.9×0.6)+(0.35×0.4)=0.68;
节点输出:out=sigmoid(0.68)=0.6637;
c.输出层节点:(0.3×0.68)+(0.9×0.6637)=0.80133
节点输出:sigmoid(0.80133)=0.69

2.后向传播更新权重
a.输出误差:δ=(t-o)(1-o)o=(0.5-0.69)(1-0.69)0.69=-0.0406;
b.更新输出层权重:
W 1 +=W 1 +(δ×i n p u t )=0.3+(-0.0406×0.68)=0.272392
W 2 +=W 2 +(δ×i n p u t )=0.9+(-0.0406×0.6637)=0.87305

c.隐藏层误差与权重更新
误差计算:
δ1 =δ×W 1 =-0.0406×0.272392×(1-o)o=-2.406×10 −3
δ2 =δ×W 2 =-0.0406×0.87305×(1-o)o=-7.916×10 −3
权重更新:
W 3 +=0.1 +(−2.406 ×10 −3 ×0.35 )=0.09916
W 4 +=0.8 +(−2.406 ×10 −3 ×0.9 )=0.7978
W 5 +=0.4 +(−7.916 ×10 −3 ×0.35 )=0.3972
W 6 +=0.6 +(−7.916 ×10 −3 ×0.9 )=0.5928

Original: https://www.cnblogs.com/Anita9002/p/9295420.html
Author: Anita-ff
Title: 深度学习基础(基础知识0)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/7625/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部