深度学习笔记三:反向传播(backpropagation)算法

本文主要介绍了深度学习中的反向传播(backpropagation)算法,这是训练神经网络的关键步骤。通过复习表达形式,详细阐述了反向传播的四个基本方程,包括输出层误差、非输出层误差、损失函数关于偏置的偏导数以及损失函数关于权值的偏导数。这些公式揭示了误差如何从输出层反向传播到输入层,以及如何利用这些信息更新权重和偏置,以改善神经网络的性能。文章强调理解反向传播算法的重要性,并指出激活值的大小对学习速度的影响,特别是在sigmoid函数中,饱和区的学习速度会降低。
摘要由CSDN通过智能技术生成

接上一篇的最后,我们要训练多层网络的时候,最后关键的部分就是求梯度啦。纯数学方法几乎是不可能的,那么反向传播算法就是用来求梯度的,用了一个很巧妙的方法。
反向传播算法应该是神经网络最基本最需要弄懂的方法了,要是反向传播方法不懂,后面基本上进行不下去。
非常推荐的是How the backpropagation algorithm works
在最开始的博客中提过,这本书是这篇笔记用到的教材之一,这节反向传播也是以上面那个链接中的内容作为笔记的,因为反向传播部分写的很好。

首先,需要记住两点:

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

一.表达形式复习

这里的表示形式指的是,我们怎么用数学的方式来表示整个神经网络中的各个权值偏置激活函数等等,以及其矩阵形式,算是对于后面推导过程的约定。详细的之前写过了:神经网络(一):概念
这里稍微复习一下。
对于权值来说:
我们用这里写图片描述来表示从L-1层的第k个神经元到第L层第j个神经元之间的权重。
比如下面这幅图就是第2层的第4个元素到第三层的第二个元素之间的权重。
这里写图片描述

对于偏置来说:
我们用这里写图片描述来表示第L层第j个神经元上的偏置。
对于激活值来说:
我们用这里写图片描述来表示第L层第j个神经元上的激活值。
这里写图片描述
比如上面的第二层的第三个神经元的偏置和第三层第一个神经元的激活值。其实很容易理解。这里要注意,因为是多层结构,如果这层不是输出层,那么这个激活值作为下一层的一个输入

那么激活值,偏置和权重之前有什么关系呢?
之前假设过我们现在只有sigmoid函数作为激活函数,参考神经网络(一):概念,可以知道:
这里写图片描述
解释一下这个公式&#

  • 85
    点赞
  • 311
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
反向传播算法是一种常用的神经网络训练算法,可以用于解决非线性分类和回归问题。其中,δ学习算法是一种基于梯度下降的反向传播算法,用于训练多层神经网络。以下是采用δ学习算法反向传播算法 MATLAB 代码实现: ``` % 加载数据 X = [0 0; 0 1; 1 0; 1 1]; y = [0; 1; 1; 0]; % 定义神经网络结构 input_layer_size = 2; % 输入层神经元个数 hidden_layer_size = 2; % 隐藏层神经元个数 output_layer_size = 1; % 输出层神经元个数 % 初始化权重和偏置 Theta1 = rand(hidden_layer_size, input_layer_size + 1) * 2 - 1; % 隐藏层权重矩阵 Theta2 = rand(output_layer_size, hidden_layer_size + 1) * 2 - 1; % 输出层权重矩阵 % 定义 sigmoid 函数 function g = sigmoid(z) g = 1 ./ (1 + exp(-z)); end % 定义 sigmoid 函数的导数 function g = sigmoidGradient(z) g = sigmoid(z) .* (1 - sigmoid(z)); end % 定义代价函数 function J = costFunction(X, y, Theta1, Theta2) % 前向传播计算输出 m = size(X, 1); a1 = [ones(m, 1) X]; z2 = a1 * Theta1'; a2 = [ones(m, 1) sigmoid(z2)]; z3 = a2 * Theta2'; h = sigmoid(z3); % 计算代价函数 J = sum(-y .* log(h) - (1 - y) .* log(1 - h)) / m; end % 定义反向传播算法 function [Theta1_grad, Theta2_grad] = backpropagation(X, y, Theta1, Theta2) % 前向传播计算输出 m = size(X, 1); a1 = [ones(m, 1) X]; z2 = a1 * Theta1'; a2 = [ones(m, 1) sigmoid(z2)]; z3 = a2 * Theta2'; h = sigmoid(z3); % 计算误差 delta3 = h - y; delta2 = delta3 * Theta2 .* sigmoidGradient([ones(m, 1) z2]); delta2 = delta2(:, 2:end); % 计算梯度 Theta1_grad = delta2' * a1 / m; Theta2_grad = delta3' * a2 / m; end % 定义学习率 learning_rate = 0.1; % 训练模型 epochs = 10000; for i = 1:epochs [Theta1_grad, Theta2_grad] = backpropagation(X, y, Theta1, Theta2); Theta1 = Theta1 - learning_rate * Theta1_grad; Theta2 = Theta2 - learning_rate * Theta2_grad; end % 预测新样本的类别 x_new = [0.5, 0.5]; a1_new = [1 x_new]; z2_new = a1_new * Theta1'; a2_new = [1 sigmoid(z2_new)]; z3_new = a2_new * Theta2'; h_new = sigmoid(z3_new); disp(h_new); ``` 注:此代码展示了采用δ学习算法反向传播算法的基本思路和实现,但是由于神经网络结构的复杂性和数据集的不同,需要根据具体情况进行参数调整和优化。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值