反向传播输出层误差 δ

这篇博客详细记录了吴恩达机器学习课程中关于神经网络反向传播的一个疑问,即输出层误差δ的计算。通常 δL 计算为 y - aL,作者通过成本函数C的推导证明了这一点,C由交叉熵构成,δL最终简化为(y - aL),解释了为何可以直接用预测值和真实值的差来表示输出层误差。
摘要由CSDN通过智能技术生成

吴恩达机器学习第5课笔记

神经网络反向传播

吴恩达的机器学习的笔记已经很多了,本文只是记录一个一直没搞清楚的问题
在课程中计算反向传播的时候,关于输出层的误差直接就给出了
δ L = y − a L . \delta^{L}=y-a^{L}. δL=yaL.
一直很疑惑,按照公式推算应该是
δ L = ∂ C ∂ z L = ∂ C ∂ a L ∂ a L ∂ z L = ∂ C ∂ a L σ ′ ( z L ) . \delta^L=\frac{\partial C}{\partial z^L}=\frac{\partial C}{\partial a^L}\frac{\partial a^L}{\partial z^L}=\frac{\partial C}{\partial a^L}\sigma'(z^L) . δL=zLC=aLCzLaL=

反向传播算法是一种常用的神经网络训练算法,可以用于解决非线性分类和回归问题。其中,δ学习算法是一种基于梯度下降的反向传播算法,用于训练多神经网络。以下是采用δ学习算法的反向传播算法 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); ``` 注:此代码展示了采用δ学习算法的反向传播算法的基本思路和实现,但是由于神经网络结构的复杂性和数据集的不同,需要根据具体情况进行参数调整和优化。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值