神经网络进一步学习

一、代价函数

        首先引入一些便于稍后讨论的新标记方法:假设神经网络的训练样本有m个,每个包含一组输入x和一组输出y,L表示神经网络层数,S_L表示该层的神经元个数,将神经网络的分类定义为两种情况:二类分类和多类分类

二类分类y=0\, or\,1

K类分类y_i = 1,表示分到第i类

回顾逻辑回归问题中我们的代价函数为:

在逻辑回归中我们只有一个输出变量,又称标量(scalar),即只有一个因变量$y$。在神经网络中,我们可以有很多输出变量,我们的$h_\theta(x)$是一个维度为$K$的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,表示为:$\newcommand{\subk}[1]{ #1_k }$

这个看起来复杂很多的代价函数背后的思想还是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大。唯一不同的是,基本上我们可以利用循环对每一行特征都预测$K$个不同结果,然后再利用循环在$K$个预测中选择可能性最高的一个,将其与$y$中的实际数据进行比较,其中正则化的那一项排除了每一层的$\theta_0$

二、反向传播算法BP

        之前我们在利用神经网络预测结果的时候我们采用了一种正向传播算法,我们从第一层开始正向一层一层进行计算,直到最后一层的h_{\theta}\left(x\right),现在为了计算代价函数的偏导数\frac{\partial}{\partial\Theta^{(l)}_{ij}}J\left(\Theta\right),我们需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。,下面以一个例子来说明反向传播算法。

假设我们的训练集只有一个实例\left({x}^{(1)},{y}^{(1)}\right),我们的神经网络是一个四层的神经网络,其中K=4,L=4,前向传播算法如图所示:

重要的是清楚地知道上面式子中上下标的含义:

l 代表目前所计算的是第几层

j 代表目前计算层中的激活单元的下标,也是下一层的第j个输入变量的下标

i 代表下一层中误差单元的下标,是受到权重矩阵中第i行影响的下一层中的误差单元的下标

如果我们考虑正则化处理,并且我们的训练集是一个特征矩阵而非向量。在上面的特殊情况中,我们需要计算每一层的误差单元来计算代价函数的偏导数。在更为一般的情况中,我们同样需要计算每一层的误差单元,但是我们需要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,我们用\Delta^{(l)}_{ij}来表示这个误差矩阵,第 l 层的第 i 个激活单元受到第 j 个参数影响而导致的误差,我们的算法表示为:

即首先用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差。

在求出了$\Delta_{ij}^{(l)}$之后,我们便可以计算代价函数的偏导数了,计算方法如下:

三、梯度检验        

        当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,这意味着虽然代价看上去在不断减小,但最终的结果可能并不是最优解。为了避免这样的问题,我们采取一种叫做梯度的数值检验(Numerical Gradient Checking)方法,这种方法的思想是通过估计梯度值来检验我们计算的导数值是否符合我们的要求

        对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。即对于某个特定的 \theta,我们计算出在 \theta-\varepsilon 处和\theta+\varepsilon 的代价值(\varepsilon是一个非常小的值,通常选取 0.001),用以估计在 \theta处的代价值

$\theta$是一个向量时,我们则需要对偏导数进行检验。因为代价函数的偏导数检验只针对一个参数的改变进行检验,下面是一个只针对$\theta_1$进行检验的示例:

最后我们还需要对通过反向传播算法计算出的偏导数进行检验,根据上面的算法,计算出的偏导数存储在矩阵 D_{ij}^{(l)}中。检验时我们要将该矩阵展开成为向量,同时我们也将\theta 矩阵展开为向量,我们针对每一个\theta 都计算一个近似的梯度值,将这些值存储于一个近似梯度矩阵中,最终将得出的这个矩阵同D_{ij}^{(l)}进行比较

四、随机初始化

        任何优化算法都需要一些初始的参数,到目前为止我们都是初始所有参数为0,这样的初始方法对于逻辑回归来说是可行的,但是对于神经网络来说是不可行的。如果我们令所有的初始参数都为0,这将意味着我们第二层的所有激活单元都会有相同的值。同理,如果我们初始所有的参数都为一个非0的数,结果也是一样的。我们通常初始参数为正负ε之间的随机值,假设我们要随机初始一个尺寸为10×11的参数矩阵,代码如下:

注意这里的 ε和前面说的梯度检验的ε没有任何关系

五、总结

小结一下使用神经网络时的步骤:

网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元,第一层的单元数即我们训练集的特征数量,最后一层的单元数是我们训练集的结果的类的数量,如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好,因为我们真正要决定的是隐藏层的层数和每个中间层的单元数。

训练神经网络:

①参数的随机初始化

②利用正向传播方法计算所有的h_{\theta}(x)

③编写计算代价函数 J 的代码

④利用反向传播方法计算所有偏导数

⑤利用数值检验方法检验这些偏导数

⑥使用优化算法来最小化代价函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.1.26力扣每日一题——计算 K 置位下标对应元素的和

2024.1.26 题目来源我的题解方法一 位运算统计二进制数中1的个数方法二 官方的一种优化计算二进制中1的个数的方法 题目来源 力扣每日一题;题序:2859 我的题解 方法一 位运算统计二进制数中1的个数 对于每一个位置i都去计算i对应的二进制数中1的个数 …

上位机图像处理和嵌入式模块部署(极致成本下的图像处理)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 目前,大家都习惯了特定的图像处理方式,要么是windows上位机来处理,要么是arm soc来进行处理,要么是…

亚信安慧AntDB:赋能业务核心 助力数据管理

在当今数据驱动的信息时代,数据库面临着前所未有的挑战与机遇。随着技术的不断进步和用户需求的多样化,传统的数据库解决方案已经难以满足运营商核心业务的复杂需求。亚信安慧AntDB数据库,作为一款强大数据库产品,旨在帮助运营商应…

JavaScript基础之基本数据类型(值类型)详解

数据类型 数据类型是指可以在程序中存储和操作的值的类型,每种编程语言都有其支持的数据类型,不同的数据类型用来存储不同的数据,例如文本,数字等 JavaScript是一种弱类型语言,在定义变量时不需要提前指定变量的类型…

[SwiftUI]Text对字符串中部分字符改变颜色和字体

如图,需要对字符串中部分字符改变颜色和字体。 在 SwiftUI 中合并带有不同样式的文本,应该使用不同的 Text 实例并将它们合并起来。将实例使用 运算符合并起来,每个 Text 实例都保持其自己的样式设置。这种方式可以正常编译并运行&#xff0…

蓝桥杯——每日一练(简单题)

题目 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。 解析 一、list()函数配合map()函数获得…

DNS是什么?DNS在网络通信中的作用是什么?(国科云)

我们在日常工作生活中,大多数情况是通过域名去访问网站、发送邮件。当我们打开一个域名或者访问一个网页时,我们的计算机需要知道这个网站的IP地址,才能完成数据的收发通信。这时,DNS就发挥了至关重要的作用,它像一个巨…

跨域请求详解

跨域请求 一 同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏…

ps---1.使用置入嵌入的智能化对象命令制作拼贴画

ps—使用置入嵌入的智能化对象命令制作拼贴画 素材 步骤 打开背景图 置入嵌入对象(置入完,移动到正确的位置,回车或双击) 栅格化图层 重复上述步骤制作拼贴画

第二百八十八回

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用…

BGP故障分析——邻居无法建立的原因

点赞关注,持续更新!!! BGP邻居关系无法建立的原因 底层IGP网络不通;接口是否调用了ACL过滤了TCP的179端口;邻居的Router ID冲突;配置的邻居的AS号错误;用Loopback建立邻居时没有配…

apex如何保存多行字符串

虽然可以用换行符把很长的字符串放在一行,但是不便于阅读。apex没有像python中三个引号这种直接支持多行字符串的格式,可以用下面这种方法: String query SELECT Project__c, Project__r.Testing_Submitted__c, Project__r.Project_Sub_P…

go语言(二十)---- 有缓冲的channel

有缓冲的channel 举个例子 package mainimport ("fmt""time" )func main() {c : make(chan int,3) //带有缓冲的 channelfmt.Println("len(c) ",len(c),",cap(c)",cap(c))go func() {defer fmt.Println("子go程结束")for i…

视频监控方案设计:EasyCVR视频智能监管系统方案技术特点与应用

随着科技的发展,视频监控平台在各个领域的应用越来越广泛。然而,当前的视频监控平台仍存在一些问题,如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果,也制约了视频监控平台的发展。 为了解决这些问…

HTML-框架标签、实体、全局属性和元信息

HTML 1.框架标签 <iframe name"b站" src"https://www.bilibili.com" width"500" height"300" frameborder"0"></iframe>iframe 标签的实际应用&#xff1a; 在网页中嵌入广告。与超链接或表单的 target 配合&a…

Google的guava缓存学习使用

导入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.1-jre</version> </dependency>使用 项目中使用到了缓存&#xff0c;定义一个切面&#xff0c;拦截类或方法上存在Sy…

SQL 系列教程(六)

目录 SQL FOREIGN KEY 约束 SQL FOREIGN KEY 约束 创建表时的 FOREIGN KEY 约束 修改表时的 FOREIGN KEY 约束 撤销 FOREIGN KEY 约束 SQL CHECK 约束 SQL CHECK 约束 创建表时的 CHECK 约束 修改表的 CHECK 约束 撤销 CHECK 约束 SQL DEFAULT 约束 SQL DEFAULT 约…

[二叉树专题]二叉树最大高度|n叉树最大高度

一、二叉树最大高度 class Solution { public:int maxDepth(TreeNode* root) {if(rootnullptr)return 0;int left maxDepth(root->left)1;int rightmaxDepth(root->right)1;return left>right?left:right;} }; 二、n叉树最大高度 class Solution { public:int maxDe…

QSqlQuery 执行Update 判断执行成功与否

1.执行更新操作的SQL语句 update s_info set name"009" where contact_number "13511112222" 怎么样判断是否确实更新操作是执行成功的 &#xff0c;可以通过下列语句判断 query.numRowsAffected() > 0 2.主要的几步操作如下: QSqlQuery query;query.…

力扣hot100 实现Trie(前缀树) 字典树 一题双解

Problem: 208. 实现 Trie (前缀树) 文章目录 思路复杂度&#x1f49d; TrieNode版&#x1f49d; 二维数组版 思路 &#x1f469;‍&#x1f3eb; 宫水三叶 复杂度 &#x1f49d; TrieNode版 public class Trie {class TrieNode{boolean end;//标记是否有以当前节点为结尾的字…