你好,游客 登录
背景:
阅读新闻

李理:自动梯度求解——使用自动求导实现多层神经网络

[日期:2016-11-24] 来源: CSDN  作者: [字体: ]

本系列文章面向深度学习研发者,希望通过Image Caption Generation,一个有意思的具体任务,深入浅出地介绍深度学习的知识。本系列文章涉及到很多深度学习流行的模型,如CNN,RNN/LSTM,Attention等。本文为第6篇。

作者:李理目前就职于环信,即时通讯云平台和全媒体智能客服平台,在环信从事智能客服和智能机器人相关工作,致力于用深度学习来提高智能机器人的性能。 

常见深度学习框架/工具使用方法

前面我们介绍了4种梯度的计算方法:

  • 手工计算
  • 数值计算
  • 符号求导
  • 自动求导

作为一个框架或者工具,显然不能使用手工计算的方式,另外数值计算效率太低,一般只能用来做gradient check。剩下的两种就是符号求导和自动求导了,目前的框架都是用的自动求导。

【注:theano说自己是 Symbolic Differentiation ,但含义并不是数学上的Symbolic Diff,感兴趣的读者可以参考 这里 。】 

再细分一下,深度学习框架可以分成两类:

1. 用户可以使用用户基本函数(也有叫操作op的)来定义计算图的;

2. 用户只能用更上层的函数。

但是这两者的界限其实很模糊。哪些函数算基本的,哪些算上层的?到底要提供多少函数才能表示所有的神经网络?

这些其实是很难界定的,但是大部分框架都提供了扩展能力,比如tensorflow可以自定义op,如果一个函数没有,你可以实现,同样的theano也可以自定义。

而另外一些框架或者工具可能就没有那么灵活。但他们本质都是类似的——我们通过某种方式(代码或者配置文件)定义一个计算图,并且定义哪些是变量【可训练的】,哪些是【常量】(或者批量给定的值如tensorflow里的placeholder),以及损失函数,它就能自动地帮我们计算损失函数对每个可训练参数的导数,而且大部分框架把梯度下降的常用方法都封装好了,我们只有指定一些参数,比如batch大小,learning rate等等。

当然有一些框架如theano并不做这些,它只帮助我们求梯度,这样的工具更“底层”一些,当然对AI使用者要求更高一些,也会更灵活一些,适合对细节感兴趣的用户和那些需要自己“创造”神经网络结构的用户——很多学术界的人很喜欢theano,而像caffe,torch,keras等就是更”上层“的工具,使用它时,我只需要定义一个一个CNN或者DNN的层就行,这个层有多少hidden unit,激活函数用什么,是否dropout,用什么loss function,然后其余的事情就不用管了。

使用自动求导来实现多层神经网络

其实就是完成CS231n的Assignment2的部分内容。

环境

请仔细阅读 安装需要的软件 。我这里根据我的环境(Ubuntu 14.04 LTS)列举一些安装的命令。 

一、下载和解压

这里是 下载路径 。 

二、安装virtualenv和依赖

cd assignment2
sudo pip install virtualenv      # This may already be installed
virtualenv .env                  # Create a virtual environment
source .env/bin/activate         # Activate the virtual environment
pip install -r requirements.txt  # Install dependencies
# Work on the assignment for a while ...
deactivate                       # Exit the virtual environment

virtualenv可以理解为一个虚拟的python环境,和系统的环境可以隔离开,而且安装程序也不需要root权限。用的时候记得source .env/bin/active!

三、下载数据

cd cs231n/datasets
./get_datasets.sh

四、编译cython扩展

python setup.py build_ext --inplace

五、启动ipython notebook

(.env) [email protected]desktop:~/cs231n/assignment2$ ipython notebook

应该会弹出浏览器打开 http://localhost:8888/tree ,打FullyConnectedNets.ipynb。 

如果没有用过 ipython notebook,请先阅读 此参考资料 。确保了解基本的操作,知道怎么执行cell等基本概念后再往下阅读。

收藏 推荐 打印 | 录入:admin | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款