Backpropagation

简介: 【6月更文挑战第24天】

反向传播算法(Backpropagation)是深度学习中用于训练多层神经网络的算法。它基于梯度下降法,通过计算损失函数关于网络参数的梯度,并更新参数以最小化损失。

反向传播算法的步骤:

  1. 初始化网络参数:通常使用小的随机数初始化权重和偏置。
  2. 前向传播:输入数据通过网络,逐层计算直到输出层,得到预测结果。
  3. 计算损失:使用损失函数(如均方误差、交叉熵等)计算预测结果与真实标签之间的差异。
  4. 反向传播:从输出层开始,逆向通过网络,计算每个参数的梯度。
  5. 参数更新:使用梯度下降法或其他优化算法更新网络参数。
  6. 迭代优化:重复步骤2-5,直到达到预定的迭代次数或损失函数值收敛。

代码实现

以下是一个简单的Python示例,实现一个具有单个隐藏层的多层感知器(MLP)的反向传播算法:

import numpy as np

# 激活函数及其导数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def sigmoid_derivative(x):
    return x * (1 - x)

# 损失函数(均方误差)
def mse_loss(y_true, y_pred):
    return ((y_true - y_pred) ** 2).mean()

# 反向传播算法
def backpropagation(X, y, weights, learning_rate, epochs):
    input_size = X.shape[1]
    hidden_size = 4  # 假设隐藏层有4个神经元
    output_size = 1  # 假设输出层有1个神经元

    # 初始化权重和偏置
    weights_input_to_hidden = np.random.randn(input_size, hidden_size)
    weights_hidden_to_output = np.random.randn(hidden_size, output_size)
    biases_hidden = np.zeros((1, hidden_size))
    biases_output = np.zeros((1, output_size))

    for epoch in range(epochs):
        # 前向传播
        hidden_layer_input = np.dot(X, weights_input_to_hidden) + biases_hidden
        hidden_layer_output = sigmoid(hidden_layer_input)

        output_layer_input = np.dot(hidden_layer_output, weights_hidden_to_output) + biases_output
        y_pred = sigmoid(output_layer_input)

        # 计算损失
        loss = mse_loss(y, y_pred)

        # 反向传播
        d_output = (y_pred - y)
        d_weights_hidden_to_output = np.dot(hidden_layer_output.T, d_output * sigmoid_derivative(output_layer_input))
        d_biases_output = np.sum(d_output * sigmoid_derivative(output_layer_input), axis=0, keepdims=True)

        d_hidden_output = np.dot(d_output * sigmoid_derivative(output_layer_input), weights_hidden_to_output.T)
        d_weights_input_to_hidden = np.dot(X.T, d_hidden_output * sigmoid_derivative(hidden_layer_input))
        d_biases_hidden = np.sum(d_hidden_output * sigmoid_derivative(hidden_layer_input), axis=0, keepdims=True)

        # 参数更新
        weights_hidden_to_output -= learning_rate * d_weights_hidden_to_output
        biases_output -= learning_rate * d_biases_output
        weights_input_to_hidden -= learning_rate * d_weights_input_to_hidden
        biases_hidden -= learning_rate * d_biases_hidden

        if epoch % 100 == 0:
            print(f"Epoch {epoch}, Loss: {loss}")

    return weights_input_to_hidden, weights_hidden_to_output, biases_hidden, biases_output

# 示例数据
X = np.array([[0, 0],
              [0, 1],
              [1, 0],
              [1, 1]])
y = np.array([[0], [1], [1], [0]])

# 训练模型
learning_rate = 0.1
epochs = 1000
weights_input_to_hidden, weights_hidden_to_output, biases_hidden, biases_output = backpropagation(X, y, None, learning_rate, epochs)
目录
相关文章
|
机器学习/深度学习 算法 PyTorch
反向传播(Backpropagation)
反向传播(Backpropagation)是一种用于训练神经网络的常用算法。它通过计算神经网络中各个参数对于损失函数的梯度,从而实现参数的更新和优化。神经网络是一种模拟人脑神经元相互连接的计算模型,用于解决各种机器学习和深度学习任务。
164 1
|
5月前
|
监控 Java API
Java一分钟之-JPA事务管理:PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW等
【6月更文挑战第14天】Java企业开发中,事务管理确保数据一致性,Spring事务管理核心概念包括`PROPAGATION_REQUIRED`和`PROPAGATION_REQUIRES_NEW`。前者在无事务时新建,有事务时加入,常用于保证业务方法在事务中执行。后者始终创建新事务,独立于当前事务,适用于需隔离影响的场景。理解其应用场景和易错点,合理配置事务传播行为,能提升应用的健壮性和性能。通过监控和日志优化事务策略是关键。
112 1
|
5月前
|
机器学习/深度学习 存储 PyTorch
四、反向传播 back propagation
四、反向传播 back propagation
|
6月前
|
机器学习/深度学习 人工智能 算法
神经网络算法——反向传播 Back Propagation
神经网络算法——反向传播 Back Propagation
82 0
|
机器学习/深度学习 算法 PyTorch
Back Propagation 反向传播
Back Propagation 反向传播
109 0
|
存储 JSON 数据挖掘
PlistEdit Pro
PlistEdit Pro 是一款为 macOS 设计的属性列表(Plist)编辑器,它可以帮助用户直观且方便地查看、编辑和管理 Plist 文件。Plist 文件是 macOS 和 iOS 操作系统中许多应用程序和系统功能使用的配置文件格式,通常包含键值对、数组和字典等数据结构。
261 0
|
机器学习/深度学习 资源调度 Python
一文弄懂神经网络中的反向传播法——Back Propagation
其实应用挺广的,在图像识别,文本分类等等都会用到,我会专门再写一篇Auto-Encoder的文章来说明,包括一些变种之类的。如果你的输出和原始输入不一样,那么就是很常见的人工神经网络了,相当于让原始数据通过一个映射来得到我们想要的输出数据,也就是我们今天要讲的话题。
一文弄懂神经网络中的反向传播法——Back Propagation
事务 @Transactional 的 Propagation.REQUIRES_NEW
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/53482960 小经验: 同一个业务类里面 , 即使声明为 Propagation.REQUIRES_NEW也不会新启一个事务。
1422 0
|
Java Spring
Springboot 跟着我了解下 事务 @Transactional 默认方式 Propagation.REQUIRED
Springboot 跟着我了解下 事务 @Transactional 默认方式 Propagation.REQUIRED
494 0
Springboot 跟着我了解下 事务 @Transactional 默认方式 Propagation.REQUIRED
|
JavaScript 前端开发
Javascript 事件propagation机制
Javascript 事件propagation机制
137 0
Javascript 事件propagation机制