文章 12
评论 4
浏览 32307
神经网络反向传播算法的推导

神经网络反向传播算法的推导

概述   在深度学习领域的研究中,神经网络有着举足轻重的地位,神经网络相关的理论也是整个深度学习研究的基石。其中,神经网络的反向传播算法又是神经网络理论的核心所在。如今各种深度学习框架百花齐放,相关的开源社区也蓬勃发展,这些深度学习框架大部分都为我们封装了神经网络的基本操作以及自动求导的功能,这样我们只需用几十行代码就可以训练一个简单的神经网络而不需要明白其内部的原理。当然,深度学习框架的发展有利亦有弊。一方面,使用深度学习框架就可以不用重复造轮子,让我们可以专注于算法本身的研究上,不需要编写过多的额外代码。另一方面,深度学习框架的出现大大降低了深度学习的门槛,这导致了广大所谓的“研究者”只知其然不知其所以然,所谓的深度学习研究就退化成了“调参”,这恐怕也是深度学习被广为诟病的特点之一。   基于上述观点,我认为一个合格的深度学习研究者在数学上一定要过关,事实上任何理工科的科研脱离了数学都是扯淡。我很早就想学习一下神经网络反向传播算法的具体内容,但却一直拖到了现在。这几天趁着矩阵论刚考完还热乎着,准备结合网上的一些资料尝试一下推导反向传播算法,就写下了这篇博客,本文只讨论全连接神经网络....

关于C++智能指针的一些思考和总结

关于C++智能指针的一些思考和总结

简介   在C++语言的编程中,内存是一个非常重要的概念,其原因在于C++不像其他的高级语言(如java, python, go等)一样提供了内存回收机制,编程过程中在堆内存区域上申请的所有内存都必须手动管理和释放,管理不当的话极容易造成内存泄漏。在C++中,我们一般使用new操作符在堆上申请内存,如 std::string* p = new std::string("hello world"); 这个语句使用new操作符在堆内存上构建了一个字符串对象,new操作符会返回一个指针供程序访问这个对象。需要注意的是,指针p是我们访问这个对象所在内存区域的唯一途径,当不需要使用这个对象时,应当使用delete操作符释放内存,即 delete p; 在后面的程序中,大致有三种情况会造成内存泄漏:1)某个线程修改了指针p的值而没有释放内存;2)程序在delete之前抛出异常,导致没有成功执行delete;3)p指针存在于栈内存上,离开指针所处的作用域时没有返回p的值,这时指针p被释放导致我们丢失了该字符串对象的内存地址。   内存泄漏在C++程序中是一种危害性较大但又经常出现的问题,因为我们....

目标检测框架——mmdetection的使用总结

目标检测框架——mmdetection的使用总结

简介   mdetection 是商汤和香港中文大学联合开源的一个基于 PyTorch 的目标检测工具包,属于香港中文大学多媒体实验室 open-mmlab 项目的一部分,项目地址为 https://github.com/open-mmlab/mmdetection。   mmdetection 使用模块化设计,将一般的目标检测算法分成了几个不同的模块,使用时只需在配置文件中声明各个模块使用的组件名称和相应的参数,就可以像搭积木一样搭建出一个完整的目标检测模型。mmdetection 有着很好的灵活性和扩展性,如果希望在其中添加新的目标检测算法,只需按照 mmdetection 的接口设计增加关键模块的代码并编写相应的配置文件即可,这样实现了不同算法间相同代码的复用,大大减少了实现一个目标检测算法所需编写的代码量。除此之外,mmdetection 大多数运算都在 GPU 上进行,这使得它有着不俗的性能。目前,mmdetection 已经集成了很多经典的目标检测算法如 Fast RCNN,Faster RCNN,Mask RCNN,retinanet,FCOS 等,未来将会添加更多的算法....

nmap使用总结

nmap使用总结

nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当然用它扫描单个主机也没有问题。nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,那些主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息),它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。

Region Proposal by Guided Anchoring 论文阅读笔记

Region Proposal by Guided Anchoring 论文阅读笔记

概述 这篇文章提出了提出了一种新的 anchor 生成方法,即通过图像特征来指导 anchor 的生成。通过预测 anchor 的位置和形状,来生成稀疏而且形状任意的 anchor,并且设计了 Feature Adaption 模块来修正特征图使之与 anchor 形状更加匹配。 文章提出手工设计 anchor 有两个要求:1)alignment,为了用卷积特征作为 anchor 的表示,anchor 的中心需要和特征图的像素中心比较好地对齐;2)consistency,feature map 不同区域的 anchor 的形状和大小应当与其感受野和语义范围一致。论文还认为,这种手工设计 anchor 的方式存在两点不足:1)必须针对不同的问题设计相应比例和大小的 anchor,错误的设计可能会影响检测器的速度和精度;2)为了得到极高的召回率,需要设计非常多的 anchor,而其中大部分 anchor 并不会覆盖到真实目标,大量的 anchor 也会带来非常大的运算开销。 方法 文章指出,对于一张图片 I,其 anchor 的位置和形状分布满足下式 P(x,y,w,h|I)=P(x,y|....

Everything that kills me makes me feel alive