返回

李宏毅教你「秒懂反向传播」:动手实现梯度下降算法

人工智能

什么是反向传播?

反向传播是一种算法,用于计算神经网络中权重的梯度。在神经网络中,权重是连接不同神经元之间的数值,它们决定了网络的输出。通过反向传播,我们可以计算出每个权重的梯度,即它对网络输出的影响程度。有了这些梯度,我们就可以使用梯度下降算法来更新权重,从而提高网络的性能。

Forwarh pass

在反向传播之前,我们首先需要了解什么是Forwarh pass。Forwarh pass是指从神经网络的输入层到输出层的前向计算过程。在这个过程中,神经网络接收输入数据,并通过各层神经元之间的连接,逐步计算出输出。

反向传播

反向传播是Forwarh pass的逆过程。它从神经网络的输出层开始,逐层计算每个权重的梯度。反向传播通过使用链式法则,将输出层的误差反向传播到各层神经元,从而计算出每个权重的梯度。

动手实现梯度下降算法

为了更深入地理解反向传播,我们动手实现一个梯度下降算法来训练一个简单的神经网络。梯度下降算法通过不断更新权重,使得神经网络的输出与期望输出之间的误差最小化。

import numpy as np

# 定义神经网络
class NeuralNetwork:
    def __init__(self):
        # 权重和偏置初始化为随机值
        self.W = np.random.randn()
        self.b = np.random.randn()

    # 前向计算
    def forward(self, x):
        return x * self.W + self.b

    # 反向传播
    def backward(self, x, y, output):
        # 计算梯度
        d_W = (output - y) * x
        d_b = (output - y)

        # 更新权重和偏置
        self.W -= d_W * 0.01  # 学习率设为0.01
        self.b -= d_b * 0.01

# 训练神经网络
network = NeuralNetwork()
for i in range(1000):
    # 随机生成输入数据和期望输出
    x = np.random.randn()
    y = x * 2 + 1

    # 前向计算
    output = network.forward(x)

    # 反向传播
    network.backward(x, y, output)

总结

反向传播是机器学习中的一个重要算法,它允许我们计算神经网络中权重的梯度。通过将反向传播与梯度下降算法相结合,我们可以训练神经网络来执行各种任务,例如图像识别、自然语言处理和机器翻译。