RetNet

简介:    深层网络一般很难训练,要么梯度弥散要么梯度爆炸。但是我们考虑这样一个事实:假设我们有一个浅层网络,网络是很同意训练的。现在我们不断增加新层来建立深层网络,一个极端的情况是增加的层什么也不学习,仅仅只是拷贝浅层的输出,即这样的新层是恒等映射(Identity mapping)。

   深层网络一般很难训练,要么梯度弥散要么梯度爆炸。但是我们考虑这样一个事实:假设我们有一个浅层网络,网络是很同意训练的。现在我们不断增加新层来建立深层网络,一个极端的情况是增加的层什么也不学习,仅仅只是拷贝浅层的输出,即这样的新层是恒等映射(Identity mapping)。这样网络至少可以和浅层一样,不应该出现退化的问题。残差学习的思路基于这个。
   对于一个堆叠层结构,当输入为x时候,学习到的特征记为H(x),现在我们希望可以学习到残差F(x) = H(x) - x,这样其实原始的学习特征为F(x) + x。之所以这样是因为残差学习相比原始特征直接学习更容易。当残差为0时,此时堆叠层仅仅做了恒等映射,至少网络性能不会下降。事实上,残差不可能为0,这样堆叠层就会在输入特征基础上学习到新的特征。残差单元如图所示。


   为什么残差学习相对更容易,从直观上来看残差学习需要学习的内容少,因为残差一般比较小,学习难度小点。从数学角度来说,首先残差单元可以表示成:
y_l = h(x_l) + F(x_l,W_l)
x_{l+1} = f(y_1)

   其中,x_lx_{l+1}分别表示第l个残差单元的输入和输出(ps:每个残差单元一般包含多层结构)。F是残差函数,表示学习到的残差,而h(x_l) = x_l表示恒等映射,f是relu激活函数。基于上式,我们求得从浅层l到深层L的学习特征为:
   x_L = x_l + \sum\limits_{i=l}^{L-1}F(x_i,W_i)
   链式求导可知:
\frac{\partial Loss}{\partial x_l} = \frac{\partial Loss}{\partial x_L} . \frac{\partial x_L}{\partial x_l} = \frac{\partial Loss}{\partial x_L} . (1 + \frac{\partial \sum\limits_{i=l}^{L-1}F(x_i,W_i)}{\partial x_l})

公式中的第一个因子\frac{\partial Loss}{\partial x_L}表示损失函数到达L的梯度,小括号中的1表示短路机可以无损的传播梯度,而另外一项残差梯度则需要经过待遇weights的层,梯度不是直接传过来的。残差梯度不会那么巧全为-1,而且就算其比较小,有1的存在也不会导致梯度消失。所以残差学习会更容易。
   吴恩达说a^{l+2} = g(z^{[l+2]} + a^{[l]}) = g(w^{[l+2]} \times a^{[l+1]} + b^{[l+2]}+ a^{[l]}),激活函数用的relu,如果z^{[l+2]}为负数,那么前面这块为0,只剩下a^{[l]},只是把a^{[l]}赋值给a^{[l+2]},首先对网络性能没有什么影响,然后a^{[l]}a^{[l+2]}这段的网络还可能学到一些特征。如果a^{[l]}a^{[l+2]}的维度不相同,比如,a^{[l+2]}为256维,a^{[l]}为128维,那么增加一个w_s,它为[256, 128]维,w_s \times a^{[l]}就可以得到需要输出的维度。
   至于resnet的结构,我就不说了,这个没啥好讲的。
感谢这位博主的博客[https://zhuanlan.zhihu.com/p/31852747]

目录
相关文章
|
9月前
|
人工智能 数据可视化 数据处理
低代码开发模式与传统模式效率对比研究:效率提升97%的案例分析与技术实现
低代码平台的出现彻底改变了软件开发的模式,将开发时间从数月缩短至一天,效率提升97%。它通过拖拽组件、使用模板等方式简化开发流程,使专业开发者和非编程人员都能快速构建应用。低代码平台的核心优势包括可视化开发、组件化设计、实时渲染与动态预览、分布式协作支持、无缝部署与事务管理等。这些特性不仅大幅缩短了开发周期,还提升了团队协作效率和应用的可靠性。此外,低代码平台还融合了AI技术,提供智能代码生成、自动化优化及故障排查等功能,进一步提高了开发效率和质量。总之,低代码开发正引领软件开发进入一个更加高效、创新和包容的新时代。
|
编译器 C语言 计算机视觉
C语言实现的图像处理程序
C语言实现的图像处理程序
|
并行计算 PyTorch 算法框架/工具
【已解决】RuntimeError: CuDA error: no kernel image is available for execution on the device
【已解决】RuntimeError: CuDA error: no kernel image is available for execution on the device
|
机器学习/深度学习 算法 Python
【Python】已解决:ModuleNotFoundError: No module named ‘sklearn‘
【Python】已解决:ModuleNotFoundError: No module named ‘sklearn‘
9296 0
|
监控 数据可视化 测试技术
性能测试:性能测试报告
**性能测试报告摘要** 报告详述系统在不同负载下的性能,作为决策、问题发现与解决、沟通合作及监控改进的依据。内容涵盖测试目的、环境、策略、用例、结果、分析、问题、调优建议及风险评估。清晰的图表辅助理解,为开发团队提供优化指导,确保系统性能与用户体验的提升。
|
JavaScript Windows
Nativefier——将网站打包成windows应用程序
Nativefier——将网站打包成windows应用程序
385 0
|
搜索推荐
企业CRM新选择——轻巧强大的阿里云上的Salesforce企业版正式发布!
阿里云与Salesforce合作推出的定制化CRM解决方案——阿里云上的Salesforce CRM CN企业版, 涵盖销售云、服务云及销售服务云三大核心云功能。销售云助力销售团队通过智能化工具提升效率, 如线索管理、预测分析等。服务云CN企业版提供工单管理、自助服务等功能, 改善客户服务体验。结合版则全面覆盖销售与服务需求, 实现业务增长与客户满意度提升。
|
Java 应用服务中间件 数据库
启动tomcat 卡在Initializing Spring root WebApplicationContext
1,多数情况下是连接数据库时出现问题, 2,如果使用mybatis 请查看 xml映射文件是否和对应的java 的dao文件名字相同,或者<mapper namespace="com.hlzt.wx.dao.TextReplyDao" >  <resultMap id="BaseResultMap" type="TextReply" > 的命名空间 com.hlz
4431 0