学习网站:Machine Learning from Scratch
Machine Learning from Scratch (Part1神经网络)
- 神经网络——Neural Networks
- 神经网络是如何工作的?
- 训练神经网络
神经网络——Neural Networks
在人工神经网络的背景下:一个神经元是一个简单的单元,它持有一个数值。这个数值被称为它的"激活值"。
一个神经网络可以做什么
神经网络由许多神经元组成,这些神经元被组织成不同的层。通常有三种类型的层,输入层(Input layer)、隐藏层(Hidden layer(s))、输出层(Output layer)。
一个神经网络可以做什么
一个人工神经网络是一个统计模型,它从训练数据中学习模式,应用于新的、未见过的数据。
神经网络是如何工作的?
神经元之间的联系
每一层中的每个神经元都与下一层的所有神经元有联系。每一个联系的强度被称为“权重。在训练过程中,这些权重被调整以识别数据中的模式。”。
神经元的激活是如何决定的
一个神经元的激活值是基于,前一层所有神经元的激活值,和连接到那些神经元的权重。
神经元的工作原理
将每个传入的激活值乘以其相应的权重,然后将这些所有的乘积相加,最后添加一个称为“偏置”的特殊值。
偏置的作用
偏置有很有重要的作用,这使得神经元能够调整对输入的敏感度,正偏置使得神经元更有可能被激活,负偏置使得神经元不太可能被激活。
激活函数
在计算加权之后,我们应用一个激活函数,常用的选择包括:
- Sigmoid 函数:将输出映射到0和1之间的范围。
- ReLU(修正线性单元):如果输入为正,则输出输入;否则输出0。
如下图中,ReLu函数:
ReLu函数是更受欢迎的,因为它有助于网络更高效地学习。
训练神经网络
现在我们已经了解了神经网络的基本结构和运作方式,接下俩让我们来看一下它是如何学习的。
前向传播——Forward Propagation
即通过神经网络传递输入以获得输出的过程:从输入层开始,对于每个后续层:计算每个神经元的加权和并应用激活函数,重复上述步骤直到我们到达输出层。
测试性能:损失函数
为了训练我们的网络,我们需要衡量它的性能如何。我们通过损失函数来做到这一点。
如图所示以上步骤:
将网络的输出与期望的输出进行比较—>计算差异,将这个差异平方(以使所有值变为正数)—>将所有输出神经元的这些平方差相加。
这个结果被称为“损失”。损失越小,网络的性能就越好。
梯度下降和反向传播
为了提高网络的性能,我们需要调整其权重和偏差。
我们使用两个关键概念即梯度下降和反向传播来做到这一点。
他们的工作原理如下:
计算损失函数的梯度,这告诉我们改变每个权重和偏差如何影响损失。
在减少损失的方向上更新权重和偏差。重复这个过程很多次。
梯度下降
梯度下降法是最小化成本函数的优化算法。我们使用梯度来更新/调整权重和偏差,以最小化成本的方向进行。
我们寻找成本函数的负梯度,它告诉我们如何改变权重和偏差,以最有效地减少成本。
反向传播
反向传播机制,它来确定每一个单样本如何调整权重和偏差,而不仅仅是它们应该向上还是向下,而是在什么相对比例下这些变化能够最快地减少成本。
梯度的大小表示成本函数对每个权重和偏差的敏感度。
例如,你有梯度 [3.2, 0.1]。调整具有梯度3.2的权重导致的成本变化是调整具有梯度0.1的权重时成本变化的32倍。
激活函数的影响因素为以下三点:
1. 改变偏差的值
2. 按照其激活程度成比例地增加权重(激活越大,变化越大)。
3. 改变前一层所有激活值,按照其权重成比例地改变(权重越大,变化越大)。
(但我们不能直接影响激活值本身,只能影响权重和偏差。)
“反向传播”:反向传播是从最后一层向第一层应用的。
∂C/∂w = ∂C/∂a × ∂a/∂z × ∂z/∂w
其中 C 代表成本,w 代表权重,a 代表激活值(神经元的输出),z 代表加权和(神经元输入,激活前)。
这告诉我们如果我们稍微调整某个特定权重w,误差C会如何变化。
它指示了权重变化的方向。如果导数是正的,减小权重将减少误差,反之亦然。
它的大小告诉我们误差对这种权重变化的敏感程度。较大的幅度 = 权重对误差的影响更大。
调整权重和偏差,使得每个权重和偏置的平均微调
是成本函数的负梯度。
(当我们训练一个神经网络时,我们的目标是最小化一个成本函数
,这个函数衡量了模型预测值和真实值之间的差异。梯度是一个向量,指向成本函数增加最快的方向。因此,如果我们想要减少成本,我们需要朝着梯度的反方向
调整权重和偏置,这就是所谓的“负梯度”
。通过这种方式,我们可以逐步优化网络的参数,使模型的预测更加准确。)
对于这里的平均微调
以这张图片为例,表格的第一行包含了多个手写数字的图像(2, 5, 0, 4, 1, 9)。这些图像代表了用于训练神经网络的数据。表格的左侧列展示了不同的权重(w0, w1, w2, …, w13,001)。表格的内容则展示了这些权重在每个训练样本(手写数字)上的调整值。
对于权重w0,在第一个训练样本(数字2)上的调整值是-0.08,在第二个训练样本(数字5)上的调整值是+0.02,依此类推。
对于权重w1,在第一个训练样本(数字2)上的调整值是-0.11,在第二个训练样本(数字5)上的调整值是+0.11,依此类推。
右侧展示了这些调整值在所有训练数据上的平均值。例如,权重w0的平均调整值是-0.08,权重w1的平均调整值是+0.12
。
这些平均调整值可以用于更新神经网络的权重和偏置,以最小化成本函数,从而提高模型的性能。
训练神经网络的步骤
将所有步骤结合起来:
训练神经网络涉及多次重复以下步骤:
1.前向传播:将输入传递通过网络。
2.计算损失:衡量输出结果与预期结果的偏差。
3.反向传播:计算如何调整权重和偏置。
4.更新权重和偏置:进行小幅度调整以提升性能。
经过多次迭代,网络逐渐学会识别训练数据中的模式,并能够将这些知识应用于新的、未见过的数据。
ok,下图就是上面写到的一些内容简化版了。