深度学习 --- stanford cs231学习笔记五(训练神经网络的几个重要组成部分之三,权重矩阵的初始化)

权重矩阵的初始化

3,权重矩阵的初始化

        深度学习所学习的重点就是要根据损失函数训练权重矩阵中的系数。即便如此,权重函数也不能为空,总是需要初始化为某个值。


3,1 全都初始化为同一个常数可以吗?

        首先要简单回顾一下隐含层中的神经元,他是由权重矩阵中的每行系数与输入x的乘积后接一个非线性函数决定的。 W有多少行,隐藏层就有多少个神经元。

        因此,当矩阵权重W中的所有元素都是同一个常数时,所有神经元的计算结果不论是在前向传播的过程中,还是在反向传播的过程中计算结果都是一样的。如此一来,隐藏层所有的神经元的功效都废了,变成了只有一个神经元。

        例如,把W的所有元素都初始化为0。不论有多少个神经元,那么前向传播的计算结果都是0,反向传播的结果都相同。


 3,2 把W初始化为一组小的随机数

        下面是一个6层的神经网络,有5个隐含层,每层都有4096个神经元。 

        

        在初始化的时候把权重矩阵W初始化为均值为0标准差为1的随机数,并且让这组数统一乘以一个很小的数。使用的激活函数为tanh,每层的计算结果也就是神经元的值,保存在hs中。

下图为每一层神经元值的分布: 

        可见随着神经网络的深度越来越深,越来越多的神经元的值为0。

对于第i层而言,前向传播的公式为:

x_{i}=tanh(x_{i-1}\cdot W_{i})

        其中x_{i}表示第i层的神经元。结合上面的结果来看,当前向传播到很深层的网络后,深层的神经元就全是死神经元了。 

此外,在反向传播时,关于第i层的权重W的本地梯度为:

\frac{\partial x_{i}}{\partial W_{i}}=\frac{\partial x_{i}}{\partial tanh(x_{i-1}\cdot W_{i})}\cdot \frac{\partial (x_{i-1}\cdot W_{i})}{\partial W_{i}}=(1-tanh(x_{i-1}\cdot W_{i})^{2})\cdot x_{i-1}

        因此,当深层网络神经元的值(也就是上面公式中的x_{i-1})很多都是0或者趋近于0后,梯度最终会趋于0,即,梯度消失。也就是说, 把W初始化为一组小的随机数是行不通的


 3,3 把W初始化为一组不太小的随机数

         既然乘以0.01不行,容易出现梯度消失,何不试一试乘以0.05呢?同样是6层网络,每层同样是4096个神经元,同样是用tanh为激活函数。

         结合每层神经元值的分布来看,出现1和-1的概率比较高。 

\frac{\partial x_{i}}{\partial W_{i}}=\frac{\partial x_{i}}{\partial tanh(x_{i-1}\cdot W_{i})}\cdot \frac{\partial (x_{i-1}\cdot W_{i})}{\partial W_{i}}=(1-tanh(x_{i-1}\cdot W_{i})^{2})\cdot x_{i-1}

        结合本地梯度来看,容易让1-tanh(x*w)^2为0,即,本地梯度为0。 


 3,4 如果依然要用随机数,缩放的比例是多少才合适呢?Xavier

        同样是6层网络,每层同样是4096个神经元,同样是用tanh为激活函数。所不同的是,之前是通过手动调整缩放系数观察神经元值的分布。现在是基于输入的尺寸,自适应的选择缩放系数。这种初始化的方法被称之为Xavier初始化。他有严格的数学证明,其目的是使得每层神经网络在前向传播和反向传播过程中保持输出的方差一致。

        计算结果如下图所示,经过xavier初始化后,所有隐藏层的神经元即不会集中在0附近,也不会徘徊于+-1两端。(对于tanh激活函数而言)


3,5 Kaiming初始化/He初始化

        上面提到的Xavier初始化,对于激活函数为tanh的网络是适用的,表现结果也比较好。但当激活函数为ReLU的网络中,依然会出现梯度消失的情况。这是ReLU函数自身天然决定的。

        为了克服这个问题何凯明发明了一种适合ReLU函数的初始化方式。采用kaiming初始化后的后的直方图会分散的更加均匀,而不是集中在0附近。


4, 批归一化(Batch Normalization)

        前面讲的初始化权重函数W,其主要目的是通过慎重的选择权重函数W的初值以避免神经元值要么产生大量的0值,要么集中在+-1。最好能保证神经元值的分布能够尽可能的均等,具体来说,每层神经元值(激活函数的输出)的分布应该尽量朝着以下这些特点努力:

1,0均值。即正负值出现的频次都有,且差不多相同。

2,适当的方差。因为如果方差太大,容易出现梯度爆炸,而方差太小,就会引起梯度消失。Xavier初始化和He初始化就是为了确保每层的激活值方差适当而设计的。


4,1 批归一化的处理对象与维度

        为了达到这一目的,相对于尝试不同初始化W的方法。Batch normalization则着重于处理全连接层的计算结果,也就是对线性变换的输出做二次处理,即对W_{i}x_{i}+b_{i}进行再处理。

        在下面的这张ppt中,我们看到输入x的维度是NxD,也就是全连接层输出的维度。要搞清楚每个维度代表什么,这里我们可以稍微先回顾一下全连接层。 

         下图为神经网络中的一张PPT,如果说batch normalization中的输入x是W_{i}x_{i}+b_{i}的话,那他的维度就应该等于这里h的维度。h的维度又是由W的其中一个维度决定,他的另一个维度等于前一层的输入。如果是单张图像则输入x的维度为Dx1,W为HxD,输出h的维度为H,H就是神经元的个数。如果输入是N张图,则输入x的维度为DxN,W为HxD,输出h的维度为HxN。

        这也就是说,在batch normalization的PPT中维度是NxD的输入x,其中N表示样本数,D表示神经元的个数


  4,2 批归一化具体的处理方式

        Batch normalization的做法和前面提过的data preprocessing很像,即,数据减去均值然后再除以标准差(虽然确实存在一些差异)。只不过data preprocessing的对象是最原始的输入数据,而Batch normalization,也叫BN层,是放在全连接层和激活函数之间的。

        与data preprocessing处理数据的不同之处是,除了下图中的第一步完全一样之外。Batch normalization的不同之处在下面图中的第二步中。首先,在除以标准差的时候,为了避免除0,所除的标准差会加上一个很小的数\varepsilon。此外,在减去均值再除以标准差之后,又要再经过一个以\gamma为缩放以\beta为偏置的线性化处理。


 4,2,1 全连接层FC的Batch Normalization

        对于全连接层FC而言,在batch normalization的PPT中输入x的维度是NxD,其中N表示样本数,D表示神经元的个数Batch normalization的处理是对N个样本求均值


 4,2,2 CNN卷积层的Batch Normalization 

        对于CNN的卷积层而言,若,输入图像的维度是CinxWxH,共N张图,即NxCxWxH。filter的维度是CinxKwxKh,总共有Cout个filter,即CoutxCinxKwxKh。则输出结果的维度是NxCoutxW'xH'(即下图中输入x的维度)Batch normalization的处理是对N个WxH的样本求均值: 


4,2,3 全连接层FC的Layer Normalization

        除了Batch normalization以外,类似的,还有一个变种叫Layer Normalization。对于全连接层FC而言,输入x的维度是NxD,其中N表示样本数,D表示神经元的个数Layer normalization的处理是对D个神经元求均值


 4,2,4 CNN卷积层的Instance Normalization

        对于CNN的卷积层而言,若,输入图像的维度是CinxWxH,共N张图,即NxCxWxH。filter的维度是CinxKwxKh,总共有Cout个filter,即CoutxCinxKwxKh。则输出结果的维度是NxCoutxW'xH'Instance Normalization的处理是对WxH的样本求均值: 


(全文完) 

--- 作者,松下J27

 参考文献(鸣谢): 

1,Stanford University CS231n: Deep Learning for Computer Vision

2,训练神经网络(第一部分)_哔哩哔哩_bilibili

3,10 Training Neural Networks I_哔哩哔哩_bilibili

4,Schedule | EECS 498-007 / 598-005: Deep Learning for Computer Vision 

版权声明:所有的笔记,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27 

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

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

相关文章

仿微信图片查看器`WPF`实现`ListBox` 鼠标滑动批量选中与反选效果

看到微信中,上传图片时的图片查看功能可以通过手指长按并滑动实现多选,于是为解析实现思路,也通过WPF 使用ListBox 实现了一版案例。 参考效果 微信效果如下,支持图片单选和鼠标长按滑动实现批量操作。 WPF模仿效果&#xff1a…

Mysql: SQL-DDL

一.SQL通用语法 1.SQL可以单行或者多行书写,以分号结尾。 2.SQL语句可以使用空格/缩进来增强语句的可读性。 3.MySQL数据库的SQL语句不区分大小写,关键字建议用大写。 4.注释: 单行注释:注释内容或#注释内容(Mysql特有) 多行注释:/*注释内容*/ 二.SQL分类 1.D…

信息学奥赛初赛天天练-34-CSP-J2021完善程序-按位异或、模拟算法、数组模拟环、约瑟夫问题应用

PDF文档公众号回复关键字:20240624 2021 CSP-J 完善程序3 1 完善程序 (单选题 ,每小题3分,共30分) (Josephus问题)有n个人围成一个圈,依次标号0至n-1。从0号开始,依次 0,1,0&#…

0801功率放大问题

3个学时讲一个电路(两个共集共集并联),4个问题,发展线索 丙类放大电路用在高频通讯行业,低频功放是甲类,乙类,甲乙类 PT三极管的损耗 Pv电源提供的功率 现代模电通常使用方法b 只有交流…

用Vue3打造一个交互式营养追踪仪表盘

本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 Vue.js 构建营养仪表盘卡片 应用场景介绍 营养仪表盘卡片是一个可视化工具,用于跟踪个人的营养摄入情况。它通常包含以下信息: 卡路里摄入目标和进度营养成分(如脂肪…

2024中国·淮安高端人才精英赛北京分站赛首战告捷

“诚意满淮,创赢未来”!6月20-21日,2024中国淮安高端人才精英赛首场分站赛在北京产业创新中心顺利举办。淮安市科技局党组书记、局长胡长青,淮安市委组织部人才处处长沈雪娇,淮安经开区党工委委员、管委会副主任、科技…

C++(part2、3-Linux系统编程+数据库项目):Linux网络云盘

文章目录 一、项目需求分析1.一期:命令行解析(1)cd(用栈管理)、ls、pwd(2)puts、gets(3)mkdir、touch、rmdir、rm 2.二期:密码验证、日志、断点续传、大文件传输(1)密码验证(2)日志(3)断点续传(4)大文件传输 3.三期:用户注册、用户登录、虚拟…

springboot+vue+mybatis穷游管理系统+PPT+论文+讲解+售后

随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多企业的之中,随之就产生了“基于vue的穷游管理系统”,这样就让基于vue的穷游管理系统更加方便简单。 对于本基于vue的穷游管理系统的设计来说…

企业文件传输系统只能传输?分享功能同样重要!(下)

上篇我们讲述了企业大文件传输的重要性以及镭速在传输方面的优势,同时企业文件的快速共享显得尤为重要。镭速软件在这方面的表现一样尤为突出,它不仅提供了强大的文件传输功能,而且在文件分享方面也有其独到之处。本文将探讨镭速软件在文件分…

协程: Flow 异步流 /

以异步方式返回多个返回值的方案: 在 Kotlin 协程 Coroutine 中 , 使用 suspend 挂起函数 以异步的方式 返回单个返回值肯定可以实现 , 如果要 以异步的方式 返回多个元素的返回值 , 可以使用如下方案 : 集合序列Suspend 挂起函数Flow 异步流 同步调用返回多个值的弊端&…

江协科技51单片机学习- p17 定时器

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

Unity面试题 UGUI调整UI与粒子特效的显示层级

首先,必须保证Canvas画布的渲染模式为了相机渲染 方法:一:将需要控制UI显示层级的Image换成Sprite 1.创建一个粒子系统,和两张Sprite. 2.设置Sprite1的Order in Layer为 -1,设置Sprite2的Order in Layer为 1,粒子的Ord…

LONGHEADS:无需训练的多头注意力长文本处理框架

大模型(LLMs)在处理海量文本数据时展现出了前所未有的能力。然而这些模型在面对超出其训练时所见序列长度的长文本时存在两个主要问题:一是模型对于超出预训练长度的文本难以有效泛化,二是注意力机制的二次方时间复杂度导致计算成…

活动预告|探索 LLM 大模型的小型化 —— 微软 Phi3在 NVIDIA Jetson 与 NIM 平台的最佳实践

在当前高速发展的人工智能领域,如何高效的部署和优化 SLM (小型的大模型) 成为关键。随着微软 Phi-3 系列模型的发布,让 SLM 在 NVIDIA Jetson 边缘计算平台上的部署成为可能。同时 Phi-3 系列模型已在 NVIDIA NIM 平台提供加速的推理服务。 NVIDIA NIM…

解决File协议导致的CORS限制,用Node.js搭建本地服务器

文章目录 一、前言二、分析报错原因三、如何解决四、具体步骤 你是否曾遇到这样的困境:在本地使用file://协议直接打开HTML文件时,由于现代浏览器的安全限制,无法跨源请求(CORS)本地资源?尤其是当你试图通过…

老电脑焕发第二春,玩转 Stable Diffusion 3

几年前,我头脑一热,配置了一台顶配级消费 PC(RTX 2080 Ti GPU i9 CPU),打算用来学习 AI。然而,起初我并没有找到合适的切入点。深度学习早期阶段,消费级显卡根本无法承担训练大模型、微调大模型…

ONLYOFFICE 桌面编辑器8.1---一个高效且强大的办公软件

软件介绍 ONLYOFFICE 桌面编辑器经过不断的更新换代现在迎来了,功能更加强大的ONLYOFFICE 桌面编辑器8.1是一个功能强大的办公套件,专为多平台设计,包括Windows、Linux和macOS。它提供了一套全面的办公工具,包括文档处理、电子表…

elementplus el-table(行列互换)转置

Element Plus v2.4.0, repl v3.4.0 <template> <div><el-table :data"tableData" style"width: 100%"><el-table-column prop"name" label"名字" width"180" /><el-table-column prop"wei…

如何linux 查询进程和杀死进程

在程序开启长链接的时候&#xff0c;有时候会发现端口被占用的情况&#xff0c;但是又没有启动相关的端口&#xff0c;所以我们需要将端口占用结束掉 1.使用指令netstat -ntlp 查看当前有哪些进程&#xff0c;如图&#xff1a; 2.使用指令kill -9 18785 杀死进程&#xff0c…

Charles抓包工具系列文章(一)-- Compose 拼接http请求

一、背景 众所周知&#xff0c;Charles是一款抓包工具&#xff0c;当然是http协议&#xff0c;不支持tcp。&#xff08;如果你想要抓tcp包&#xff0c;请转而使用wireshark&#xff0c;在讲述websocket的相关技术有梳理过wireshark抓包&#xff09; 话说回来&#xff0c;char…