神经网络的学习(Neural Networks: Learning)-反向传播算法

2023-05-16


梯度下降算法中每一次迭代都按照如下公式进行更新:


a是学习速率。其中关键步骤是计算偏导数,为了计算代价函数的偏导数,我们需要采用一种反向传播算法:

(1)       进行前向传播计算

(2)       计算输出层的总误差

(3)       反向传播计算各层误差

(4)       计算最终的偏导数值

假设只有一个实例的四层神经网络如下:


(1)  进行前向传播计算:


(z是没经过激活函数的输出,a是经过激活函数的输出)

(2)由于单个神经元采用逻辑回归模型,因此定义误差为:


则最后一层的误差:


(若是线性回归,可直接得出

(3)根据链式求导法则, 反向传播计算各层误差:


(4)根据链式求导法则,计算最终的偏导数值:



相关代码实现:
%1.先前向传播计算代价函数
X1=[ones(m,1),X];%5000*401,X为输入的训练数据
a2 =sigmoid(X1 * Theta1');  % 第二层激活函数输出,5000*401/401*25
a2 = [ones(m, 1) a2];       % 第二层加入b,5000*26
a3 = 1 ./ ( 1 + exp(-a2 * Theta2') ) ;%第三层输出(即输出层)
J1=0;
for i=1:num_labels
    y1=(y==i);
    %针对每个分类进行计算
    J1=sum(y1 .* log( a3(:,i)) + (1 - y1 ) .* log( (1 - a3(:,i)) ))+J1;
end
%对代价函数进行正则化
temp1 = [zeros(size(Theta1,1),1) Theta1(:,2:end)];   % 先把theta(1)拿掉,不参与正则化
temp2 = [zeros(size(Theta2,1),1) Theta2(:,2:end)];
temp1 = sum(temp1 .^2);     % 计算每个参数的平方,再就求和
temp2 = sum(temp2 .^2);
J= -1 /m*J1+lambda/(2*m) * ( sum(temp1(:))+ sum(temp2(:)) );

%2.后向传播算法计算偏导数
delta_1 = zeros(size(Theta1));
delta_2 = zeros(size(Theta2));
%2.1.前向传播计算输出(a3)
%2.2.计算总误差
err3=zeros(size(a3));%5000*10
for i=1:num_labels
    err3(:,i)=a3(:,i)-(y==i);
end
%2.3.后向传播计算各层误差(由上一层误差和权值决定)
err2=Theta2'*err3';%26*10/10*5000
err2=err2(2:end,:).*((a2(:,2:end))'.*(1-a2(:,2:end))');%25*5000/25*5000
%2.4.计算偏导数
for i=1:m
    delta_1 = delta_1+err2(:,i)*X1(i,:);%25*1/1*401
    delta_2 = delta_2 + (err3(i,:))'* a2(i,:);%10*1/1*26
end
%2.5.加入正则化项
temp1 = [zeros(size(Theta1,1),1) Theta1(:,2:end)];   % 先把theta(1)拿掉,不参与正则化
temp2 = [zeros(size(Theta2,1),1) Theta2(:,2:end)];
Theta1_grad=1/m*delta_1+lambda/m*temp1;
Theta2_grad=1/m*delta_2+lambda/m*temp2;
%将参数从矩阵展开成向量,得到最终计算出的偏导数
grad = [Theta1_grad(:) ; Theta2_grad(:)];

----来源于斯坦福公开课

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

神经网络的学习(Neural Networks: Learning)-反向传播算法 的相关文章

  • JAVA四大域对象总结

    JAVA四大域对象总结 根据有作用范围由小到大 xff1a page 当前jsp页面 page域指的是pageContext request 一次请求 request域request HttpServletContext session 一
  • Java中如何判断两个对象是否相等

    如何判断两个对象相等 xff0c 这个问题实际上可以看做是如何对equals方法和hashcode方法的理解 从以下几个点来理解equals和hashCode方法 xff1a 1 equals的作用及与 61 61 的区别 2 hashco
  • nginx中的日志管理

    我们观察nginx的server段 可以看到如下类似信息 access log logs host access log main 这说明 该server 它的访问日志的文件是 logs host access log 使用的格式 main
  • 用SQL来校验证件号码是否合法

    正确时返回证件号 xff0c 错误时返回错误原因 select t centno xingming ZJHM FUNC AAC002 15 18 ZJHM from TABLEt where ZJHM lt gt FUNC AAC002 1
  • 微信聊天记录做成词云~

    最近快毕业了 xff0c 所以想把微信聊天记录全部导出 做成词云 然后寄给好友 xff0c 想想都很浪漫 xff0c 哈哈 先上词云结果图 xff08 结果图拿 三国演义 做的 xff0c 想啥呢 xff0c 我才不会把我的聊天记录发到网上
  • iOS collectionView添加头部底部view

    定义一个collectionview 创建colloectionview private func createCollectionView let layout 61 UICollectionViewFlowLayout layout s
  • UIBezierPath详解

    使用UIBezierPath类可以创建基于矢量的路径 xff0c 这个类在UIKit中 此类是Core Graphics框架关于path的一个封装 使用此类可以定义简单的形状 xff0c 如椭圆或者矩形 xff0c 或者有多个直线和曲线段组
  • 树莓派vnc连接

    网上大多数的树莓派连接都是采用tightvncserver xff0c 事实上刷入最新版的树莓派系统已经自带vnc 了 xff0c 不需要用那个tightvncserver了 xff0c 因为它用起来太不方便安装后还要设置自启动等等 xff
  • VSCode 编写C#代码有提示,但是没有报错

    使用VSCode去编写C 的时候 xff0c 突然遇到一个问题 xff1a 按道理这里的Demoalkdfljadflk是一个未定义的类 xff0c 应该会给红色的波浪线提示 xff0c 到这里没有 xff0c 同时代码不能跟踪进入到源码
  • Pending transaction

    In this Document Purpose Last Review Date Instructions for the Reader Troubleshooting Details 1 Pending WIP Material Tra
  • nginx配置不生效

    1 先确认是否存在多个nginx配置文件以及配置是否正确 nginx span class token operator span t 可以看到我这里反馈出 etc nginx nginx conf的配置文件配置正常 如果你这里出现的配置文
  • debian10中文乱码的问题

    首先输入locale xff0c 查看本机语言包 xff0c 发现没有中文的 输入 dpkg reconfigure locales 在末尾选择按空格键选中图中四个 xff0c 按enter确认 xff0c 最后终端选中中文utf 8的即可
  • 利用HBuilder打包前端开发webapp为apk

    现在的前端开发可谓是 xff0c 百花齐放啦 xff0c 什么都可以做 xff0c 只有想不到没有做不到的 xff0c 今天就简单的介绍用vue xff0c ng或者是react开发的单页应用如何打包为apk xff0c 在移动设备上运行
  • 回调函数基本介绍和基本使用场景

    1 回调函数基本定义 什么是函数指针 通俗来说 xff0c 函数指针是一个指向特定函数的指针 函数的类型由其参数及返回类型共同决定 xff0c 与函数具体名称无关 示例代码如下 xff1a int testFun1 int param1 l
  • SQLite学习笔记(八)-- BLOB数据的插入与查询(C++实现)

    1 什么是BLOB数据 BLOB binary large object 即二进制大对象 xff0c 是一种可以存储二进制文件的容器 在计算机中 xff0c BLOB常常是数据库中用来存储二进制文件的字段类型 常见的BLOB文件有图片 声音
  • elasticsearch-7.8安装

    elasticsearch 7 8安装 下载部署安装elasticsearch head中文分词插件 下载 可以从 elastic 的官网 elastic co downloads elasticsearch 获取最新版本的 Elastic
  • gitlab-ce 完全卸载

    1 停止gitlab ce gitlab span class token operator span ctl stop 2 卸载gitlab ce rpm span class token operator span e gitlab s
  • Android Studio 常见错误 之 Servers certificate is not trusted 解决证书不可信任老弹出的 问题

    Android Studio 常见错误 之 Server 39 s certificate is not trusted 解决证书不可信任老弹出的 问题 目录 Android Studio 常见错误 之 Server 39 s certif
  • Linux 之 Ubuntu 下安装配置ARM交叉编译器(工具链)的简单整理

    Linux 之 Ubuntu 下安装配置ARM交叉编译器 工具链 的简单整理 目录 Linux 之 Ubuntu 下安装配置ARM交叉编译器 工具链 的简单整理 一 简单介绍 二 下载 arm 交叉编译安装工具包 xff0c 并安装到虚拟机
  • oracle erp不能和其他文档复制粘贴

    1 JAVA 插件问题 重装一下 JAVA 插件吧 记得第一次登陆 ORACLE 系统的时候会弹出提示 需要点击 xff1a 总是授予 按钮 xff0c 不同版本可能提示不同 xff0c 反正注意下意思相近的就行了 2 是 JAVA 的问题

随机推荐