深度学习自学笔记五:浅层神经网络(二)

目录

一、激活函数

二、激活函数的导数

三、神经网络的梯度下降

四、反向传播

五、随机初始化


一、激活函数

神经网络中常用的激活函数有以下几种:

1. Sigmoid函数(Logistic函数):

Sigmoid函数将输入值映射到0和1之间,公式为f(x) = 1 / (1 + exp(-x))。它的输出在[0, 1]之间,适用于二分类问题或者作为其他激活函数的输入。

2. 双曲正切函数(Tanh函数):

Tanh函数将输入值映射到[-1, 1]之间,公式为f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))。它相比于Sigmoid函数具有更大的动态范围。

3. ReLU函数(Rectified Linear Unit):

ReLU函数是一种非线性激活函数,对于正数输入,输出等于输入,对于负数输入,输出为0,公式为f(x) = max(0, x)。ReLU函数在深度学习中被广泛使用,因为它能够有效地解决梯度消失问题。

4. Leaky ReLU函数:

Leaky ReLU函数是ReLU函数的改进版,对于负数输入,输出不再是0,而是一个小的斜率乘以输入值,公式为f(x) = max(0.01x, x)。Leaky ReLU函数可以一定程度上缓解ReLU函数可能出现的"死亡神经元"问题。

5. PReLU函数(Parametric ReLU):

PReLU函数是Leaky ReLU函数的进一步改进,不再固定斜率为常数,而是将斜率作为参数进行学习。PReLU函数可以更好地适应不同的数据集和网络结构。

6. Softmax函数:

Softmax函数将输入值映射到[0, 1]之间,并保证所有输出的总和为1。它常用于多分类问题中,将模型的输出转化为概率分布。

这些是神经网络中常见的激活函数,每个激活函数都有其独特的特性和适用场景,根据具体的任务和网络结构选择合适的激活函数能够提高神经网络的性能。

二、激活函数的导数

以下是上述激活函数的导数:

1. Sigmoid函数的导数:

导数公式为f'(x) = f(x) * (1 - f(x)),其中f(x)表示Sigmoid函数的输出。

2. 双曲正切函数的导数:

导数公式为f'(x) = 1 - f(x)^2,其中f(x)表示Tanh函数的输出。

3. ReLU函数的导数:

当输入大于0时,导数为1;当输入小于等于0时,导数为0。

4. Leaky ReLU函数的导数:

当输入大于0时,导数为1;当输入小于0时,导数为一个小的常数(如0.01)。

5. PReLU函数的导数:

当输入大于0时,导数为1;当输入小于0时,导数为一个学习得到的小的斜率值。

6. Softmax函数的导数:

Softmax函数的导数相对复杂,取决于具体的上游损失函数。通常在实际应用中,通过反向传播算法计算导数。

需要注意的是,这些导数只是针对每个激活函数本身的导数公式,并没有考虑到神经网络中的其他层和损失函数的影响。在实际计算中,通过链式法则和反向传播算法可以有效地计算整个网络的梯度,从而进行参数更新和训练。

三、神经网络的梯度下降

神经网络的梯度下降是一种优化算法,用于更新神经网络中的参数以最小化损失函数。以下是梯度下降的基本原理和步骤:

1. 前向传播:

首先,通过前向传播计算神经网络的输出值。从输入层开始,逐层计算每个神经元的输出,并将其作为下一层的输入,直到计算出整个网络的输出。

2. 计算损失函数:

使用预测结果和真实标签之间的差异来计算损失函数。常见的损失函数包括均方误差(Mean Squared Error)和交叉熵(Cross-Entropy)等。

3. 反向传播:

通过反向传播算法计算损失函数对网络中每个参数的梯度。反向传播使用链式法则将梯度从输出层向输入层传播,以有效地计算每个参数对损失函数的贡献程度。

4. 参数更新:

根据参数的梯度和学习率(learning rate),使用梯度下降算法更新每个参数的值。梯度下降算法的一般形式是:新参数 = 原参数 - 学习率 * 参数梯度。

5. 重复迭代:

重复执行前面的步骤,对整个训练集中的样本进行迭代。每次迭代都会计算一次损失函数并更新参数,直到达到预定的迭代次数或达到停止条件。

梯度下降算法通过不断地调整神经网络的参数,使得网络能够更好地拟合训练数据,并在未见过的数据上具有较好的泛化能力。需要注意的是,梯度下降算法可能会面临局部最优解和学习率选择等问题,因此在实践中还存在一些改进的变种算法,如随机梯度下降(Stochastic Gradient Descent)、动量优化(Momentum Optimization)和自适应学习率方法(Adaptive Learning Rate Methods)等。

四、反向传播

反向传播是一种用于训练神经网络的算法。在神经网络中,我们希望通过调整网络参数来最小化损失函数,使得网络能够更好地进行预测。

反向传播算法的核心思想是基于链式法则(也称为求导法则)来计算每个参数对损失函数的梯度。它通过将损失函数的梯度从输出层向输入层逐层传播,从而计算出每个参数对损失函数的贡献,然后使用梯度下降等优化算法来更新这些参数。

具体而言,反向传播算法包含以下步骤:

1. 正向传播:将输入样本通过神经网络前向传播,计算输出值。

2. 计算损失:将网络输出值与真实标签进行比较,计算损失函数的值。

3. 反向传播:根据损失函数的值,通过链式法则计算每个参数对损失函数的梯度。

4. 参数更新:使用梯度下降或其他优化算法,根据梯度的方向和大小,对网络参数进行更新。

5. 重复以上步骤:重复执行上述步骤,直到达到停止条件(例如达到最大迭代次数或损失函数收敛)。

反向传播算法的核心是计算参数梯度,这些梯度指示了在给定输入下,调整参数会如何改变损失函数的值。通过在训练数据上迭代应用反向传播算法,神经网络能够学习出适合特定任务的参数设置。反向传播算法通过链式法则来计算每个参数对损失函数的梯度。下面是反向传播公式的说明:

设L为损失函数,y为神经网络的输出,a为最后一层网络的输入(未经过激活函数的值),z为最后一层网络的输出(经过激活函数的值)。

1. 最后一层的梯度计算:

首先计算损失函数对最后一层输入a的梯度:

dL/da = ∂L/∂a

然后根据激活函数计算最后一层输出z对最后一层输入a的梯度:

dz/da = ∂z/∂a

最后,将上述两个梯度相乘得到最后一层损失函数对输入a的梯度:

dL/dz * dz/da = (dL/da) * (dz/da) = ∂L/∂a

2. 其他隐藏层的梯度计算:

对于第l层隐藏层,需要计算损失函数对该层输入a的梯度:

dL/da^l = ∂L/∂a^l

通过链式法则,可以将该梯度与上一层输出a^l-1对该层输入a^l的梯度相乘,得到损失函数对该层输入a^l的梯度:

dL/da^l * da^l/da^l-1 = (dL/da^l) * (da^l/da^l-1) = ∂L/∂a^l

3. 参数梯度计算:

对于第l层的权重矩阵W^l和偏置项b^l,我们需要计算损失函数对它们的梯度:

dL/dW^l = ∂L/∂W^l

dL/db^l = ∂L/∂b^l

通过链式法则,可以将上一层输出a^l-1对权重矩阵W^l和偏置项b^l的梯度相乘,得到损失函数对它们的梯度:

dL/da^l-1 * da^l-1/dW^l = (dL/dW^l) * (da^l-1/dW^l) = ∂L/∂W^l

dL/da^l-1 * da^l-1/db^l = (dL/db^l) * (da^l-1/db^l) = ∂L/∂b^l

以上就是反向传播算法中的主要公式说明。通过逐层计算每个参数对损失函数的梯度,反向传播算法能够有效地更新神经网络中的参数,使其能够更好地拟合训练数据。

五、随机初始化

在神经网络中,随机初始化是指在训练过程开始前,对网络的参数进行随机赋值。这是为了打破对称性和避免参数落入局部最优解。

具体来说,随机初始化将权重参数(例如连接权重矩阵)设置为接近于零但不完全相同的小随机值。这样做的目的是确保每个神经元在开始时具有不同的初始状态,从而使网络能够学习到不同的特征。如果所有的权重初始值都相同,那么在正向传播和反向传播过程中,所有的神经元将以相同的方式更新,导致模型无法充分利用网络的表达能力。

随机初始化通常遵循一些常见的原则:

1. 零均值初始化:权重参数的初始值应该以接近零的均值进行初始化,这有助于避免梯度爆炸或梯度消失问题。

2. 适当的方差:权重参数的初始值需要具有适当的方差,使得输入在网络层之间传播时不会过度缩放或扩展。常见的初始化方法包括使用高斯分布、均匀分布或者Xavier/Glorot初始化等。

3. 偏置项初始化:偏置项通常初始化为零或者较小的正值,以确保网络在初始状态下可以对不同类别的样本有一定的反应。

需要注意的是,随机初始化只是训练神经网络的第一步,在后续的训练过程中,权重将会根据损失函数进行调整和优化。因此,合适的随机初始化是训练成功的基础,但最终的模型性能仍然依赖于训练算法、数据集质量和超参数等因素的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ironmao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值