2017-10-16 15:15:28 Scythe666 阅读数 411
  • 深度学习30天系统实训

    系列教程从深度学习核心模块神经网络开始讲起,将复杂的神经网络分模块攻克。由神经网络过度到深度学习,详解深度学习中核心网络卷积神经网络与递归神经网络。选择深度学习当下流行框架Tensorflow进行案例实战,选择经典的计算机视觉与自然语言处理经典案例以及绚丽的AI黑科技实战,从零开始带大家一步步掌握深度学习的原理以及实战技巧。课程具体内容包括:神经网络基础知识点、神经网络架构、tensorflow训练mnist数据集、卷积神经网络、CNN实战与验证码识别、自然语言处理word2vec、word2vec实战与对抗生成网络、LSTM情感分析与黑科技概述。

    14362 人正在学习 去看看 唐宇迪

如何开启深度学习之旅?这三大类125篇论文为你导航(附资源下载) 

如果你现在还是个深度学习的新手,那么你问的第一个问题可能是「我应该从哪篇文章开始读呢?在 G上,s准备了一套深度学习阅读清单,而且这份清单在随时更新。

项目地址:

这份清单依照下述 4 条原则建立:

从整体轮廓到细节

从过去到当代

从一般到具体领域

聚焦当下最先进技术

你会发现很多非常新但很值得一读的论文。这份清单我会持续更新。

1、深度学习的历史与基础知识

1.0 书籍

[0] Bengio, Yoshua, Ian J. Goodfellow, and Aaron Courville. 深度学习(Deep learning), An MIT Press book. (2015). (这是深度学习领域的圣经,你可以在读此书的同时阅读下面的论文)。

1.1 调查类:

[1] LeCun, Yann, Yoshua Bengio, and Geoffrey Hinton. 深度学习 (Deep learning), Nature 521.7553 (2015): 436-444. (深度学习三位大牛对各种学习模型的评价)

1.2 深度信念网络(DBN)(深度学习前夜的里程碑)

[2] Hinton, Geoffrey E., Simon Osindero, and Yee-Whye Teh. 一个关于深度信念网络的快速学习算法(A fast learning algorithm for deep belief nets), (深度学习的前夜)

[3] Hinton, Geoffrey E., and Ruslan R. Salakhutdinov. 使用神经网络降低数据的维度(Reducing the dimensionality of data with neural networks), (里程碑式的论文,展示了深度学习的可靠性)

1.3 ImageNet 的演化(深度学习从这里开始)

[4] Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. 使用深度卷积神经网络进行 ImageNet 分类任务(Imagenet classification with deep convolutional neural networks)(AlexNet, 深度学习的突破)

[5] Simonyan, Karen, and Andrew Zisserman. 针对大尺度图像识别工作的的超深卷积网络(Very deep convolutional networks for large-scale image recognition) (VGGNet, 神经网络开始变得非常深!)

[6] Szegedy, Christian, et al. 更深的卷积(Going deeper with convolutions)(GoogLeNet)

[7] He, Kaiming, et al. 图像识别的深度残差学习(Deep residual learning for image recognition)(ResNet,超级超级深的深度网络!CVPR--IEEE 国际计算机视觉与模式识别会议-- 最佳论文)

1.4 语音识别的演化

[8] Hinton, Geoffrey, et al. 语音识别中深度神经网络的声学建模(Deep neural networks for acoustic modeling in speech recognition: The shared views of four research groups)(语音识别中的突破)

[9] Graves, Alex, Abdel-rahman Mohamed, and Geoffrey Hinton. 用深度循环神经网络进行语音识别(Speech recognition with deep recurrent neural networks)(RNN)

[10] Graves, Alex, and Navdeep Jaitly. 面向端到端语音识别的循环神经网络(Towards End-To-End Speech Recognition with Recurrent Neural Networks)

[11] Sak, Ha?im, et al. 语音识别中快且精准的循环神经网络声学模型(Fast and accurate recurrent neural network acoustic models for speech recognition)(语音识别系统)

[12] Amodei, Dario, et al. Deep speech 2:英语和汉语的端到端语音识别(Deep speech 2: End-to-end speech recognition in english and mandarin)(百度语音识别系统)

[13] W. Xiong, J. Droppo, X. Huang, F. Seide, M. Seltzer, A. Stolcke, D. Yu, G. Zweig,在对话语音识别中实现人类平等(Achieving Human Parity in Conversational Speech Recognition)

当你读完了上面给出的论文,你会对深度学习历史有一个基本的了解,深度学习建模的基本架构(包括了 CNN,RNN,LSTM)以及深度学习如何可以被应用于图像和语音识别问题。下面的论文会让你对深度学习方法,不同应用领域中的深度学习技术和其局限有深度认识。

2 深度学习方法

2.1 模型

[14] Hinton, Geoffrey E., et al. 通过避免特征检测器的共适应来改善神经网络(Improving neural networks by preventing co-adaptation of feature detectors)(Dropout)

[15] Srivastava, Nitish, et al. Dropout:一种避免神经网络过度拟合的简单方法(Dropout: a simple way to prevent neural networks from overfitting)

[16] Ioffe, Sergey, and Christian Szegedy. Batch normalization:通过减少内部协变量加速深度网络训练(Batch normalization: Accelerating deep network training by reducing internal covariate shift)(2015 年一篇杰出论文)

[17] Ba, Jimmy Lei, Jamie Ryan Kiros, and Geoffrey E. Hinton.层归一化(Layer normalization)(批归一化的升级版)

[18] Courbariaux, Matthieu, et al. 二值神经网络:训练神经网络的权重和激活约束到正 1 或者负 1(Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to+ 1 or?1)(新模型,快)

[19] Jaderberg, Max, et al. 使用合成梯度的解耦神经接口(Decoupled neural interfaces using synthetic gradients)(训练方法的发明,令人惊叹的文章)

[20] Chen, Tianqi, Ian Goodfellow, and Jonathon Shlens. Net2net:通过知识迁移加速学习(Net2net: Accelerating learning via knowledge transfer) (修改之前的训练网络以减少训练)

[21] Wei, Tao, et al. 网络形态(Network Morphism)(修改之前的训练网络以减少训练 epoch)

2.2 优化

[22] Sutskever, Ilya, et al. 有关深度学习中初始化与动量因子的研究(On the importance of initialization and momentum in deep learning) (动量因子优化器)

[23] Kingma, Diederik, and Jimmy Ba. Adam:随机优化的一种方法(Adam: A method for stochastic optimization)(可能是现在用的最多的一种方法)

[24] Andrychowicz, Marcin, et al. 通过梯度下降学习梯度下降(Learning to learn by gradient descent by gradient descent) (神经优化器,令人称奇的工作)

[25] Han, Song, Huizi Mao, and William J. Dally. 深度压缩:通过剪枝、量子化训练和霍夫曼代码压缩深度神经网络(Deep compression: Compressing deep neural network with pruning, trained quantization and huffman coding) (ICLR 最佳论文,来自 DeePhi 科技初创公司,加速 NN 运行的新方向)

[26] Iandola, Forrest N., et al. SqueezeNet:带有 50x 更少参数和小于 1MB 模型大小的 AlexNet-层级精确度(SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 1MB model size.) (优化 NN 的另一个新方向,来自 DeePhi 科技初创公司)

2.3 无监督学习/深度生成模型

[27] Le, Quoc V. 通过大规模无监督学习构建高级特征(Building high-level features using large scale unsupervised learning.) (里程碑,吴恩达,谷歌大脑,猫)

[28] Kingma, Diederik P., and Max Welling. 自动编码变异贝叶斯(Auto-encoding variational bayes.) (VAE)

[29] Goodfellow, Ian, et al. 生成对抗网络(Generative adversarial nets.)(GAN, 超酷的想法)

[30] Radford, Alec, Luke Metz, and Soumith Chintala. 带有深度卷曲生成对抗网络的无监督特征学习(Unsupervised representation learning with deep convolutional generative adversarial networks.)(DCGAN)

[31] Gregor, Karol, et al. DRAW:一个用于图像生成的循环神经网络(DRAW: A recurrent neural network for image generation.) (值得注意的 VAE,杰出的工作)

[32] Oord, Aaron van den, Nal Kalchbrenner, and Koray Kavukcuoglu. 像素循环神经网络(Pixel recurrent neural networks.)(像素 RNN)

[33] Oord, Aaron van den, et al. 使用像素 CNN 解码器有条件地生成图像(Conditional image generation with PixelCNN decoders.) (像素 CNN)

2.4 RNN/序列到序列模型

[34] Graves, Alex. 带有循环神经网络的生成序列(Generating sequences with recurrent neural networks.)(LSTM, 非常好的生成结果,展示了 RNN 的力量)

[35] Cho, Kyunghyun, et al. 使用 RNN 编码器-解码器学习词组表征用于统计机器翻译(Learning phrase representations using RNN encoder-decoder for statistical machine translation.) (第一个序列到序列论文)

[36] Sutskever, Ilya, Oriol Vinyals, and Quoc V. Le. 运用神经网路的序列到序列学习(Sequence to sequence learning with neural networks.」)(杰出的工作)

[37] Bahdanau, Dzmitry, KyungHyun Cho, and Yoshua Bengio. 通过共同学习来匹配和翻译神经机器翻译(Neural Machine Translation by Jointly Learning to Align and Translate.)

[38] Vinyals, Oriol, and Quoc Le. 一个神经对话模型(A neural conversational model.)(聊天机器人上的序列到序列)

2.5 神经图灵机

[39] Graves, Alex, Greg Wayne, and Ivo Danihelka. 神经图灵机器(Neural turing machines.)arXiv preprint arXiv:1410.5401 (2014). (未来计算机的基本原型)

[40] Zaremba, Wojciech, and Ilya Sutskever. 强化学习神经图灵机(Reinforcement learning neural Turing machines.)

[41] Weston, Jason, Sumit Chopra, and Antoine Bordes. 记忆网络(Memory networks.)

[42] Sukhbaatar, Sainbayar, Jason Weston, and Rob Fergus. 端到端记忆网络(End-to-end memory networks.)

[43] Vinyals, Oriol, Meire Fortunato, and Navdeep Jaitly. 指示器网络(Pointer networks.)

[44] Graves, Alex, et al. 使用带有动力外部内存的神经网络的混合计算(Hybrid computing using a neural network with dynamic external memory.)(里程碑,结合上述论文的思想)

2.6 深度强化学习

[45] Mnih, Volodymyr, et al. 使用深度强化学习玩 atari 游戏(Playing atari with deep reinforcement learning.) (第一篇以深度强化学习命名的论文)

[46] Mnih, Volodymyr, et al. 通过深度强化学习达到人类水准的控制(Human-level control through deep reinforcement learning.) (里程碑)

[47] Wang, Ziyu, Nando de Freitas, and Marc Lanctot. 用于深度强化学习的决斗网络架构(Dueling network architectures for deep reinforcement learning.) (ICLR 最佳论文,伟大的想法 )

[48] Mnih, Volodymyr, et al. 用于深度强化学习的异步方法(Asynchronous methods for deep reinforcement learning.) (当前最先进的方法)

[49] Lillicrap, Timothy P., et al. 运用深度强化学习进行持续控制(Continuous control with deep reinforcement learning.) (DDPG)

[50] Gu, Shixiang, et al. 带有模型加速的持续深层 Q-学习(Continuous Deep Q-Learning with Model-based Acceleration.)

[51] Schulman, John, et al. 信赖域策略优化(Trust region policy optimization.) (TRPO)

[52] Silver, David, et al. 使用深度神经网络和树搜索掌握围棋游戏(Mastering the game of Go with deep neural networks and tree search.) (阿尔法狗)

2.7 深度迁移学习/终身学习/尤其对于 RL

[53] Bengio, Yoshua. 表征无监督和迁移学习的深度学习(Deep Learning of Representations for Unsupervised and Transfer Learning.) (一个教程)

[54] Silver, Daniel L., Qiang Yang, and Lianghao Li. 终身机器学习系统:超越学习算法(Lifelong Machine Learning Systems: Beyond Learning Algorithms.) (一个关于终生学习的简要讨论)

[55] Hinton, Geoffrey, Oriol Vinyals, and Jeff Dean. 提取神经网络中的知识(Distilling the knowledge in a neural network.) (教父的工作)

[56] Rusu, Andrei A., et al. 策略提取(Policy distillation.) (RL 领域)

[57] Parisotto, Emilio, Jimmy Lei Ba, and Ruslan Salakhutdinov. 演员模仿:深度多任务和迁移强化学习(Actor-mimic: Deep multitask and transfer reinforcement learning.) (RL 领域)

[58] Rusu, Andrei A., et al. 渐进神经网络(Progressive neural networks.)(杰出的工作,一项全新的工作)

2.8 一次性深度学习

[59] Lake, Brenden M., Ruslan Salakhutdinov, and Joshua B. Tenenbaum. 通过概率程序归纳达到人类水准的概念学习(Human-level concept learning through probabilistic program induction.)(不是深度学习,但是值得阅读)

[60] Koch, Gregory, Richard Zemel, and Ruslan Salakhutdinov. 用于一次图像识别的孪生神经网络(Siamese Neural Networks for One-shot Image Recognition.)

[61] Santoro, Adam, et al. 用记忆增强神经网络进行一次性学习(One-shot Learning with Memory-Augmented Neural Networks ) (一个一次性学习的基本步骤)

[62] Vinyals, Oriol, et al. 用于一次性学习的匹配网络(Matching Networks for One Shot Learning.)

[63] Hariharan, Bharath, and Ross Girshick. 少量视觉物体识别(Low-shot visual object recognition.)(走向大数据的一步)

3 应用

3.1 NLP(自然语言处理)

[1] Antoine Bordes, et al. 开放文本语义分析的词和意义表征的联合学习(Joint Learning of Words and Meaning Representations for Open-Text Semantic Parsing.)

[2] Mikolov, et al. 词和短语及其组合性的分布式表征(Distributed representations of words and phrases and their compositionality.) (word2vec)

[3] Sutskever, et al. 运用神经网络的序列到序列学习(Sequence to sequence learning with neural networks.)

[4] Ankit Kumar, et al. 问我一切:动态记忆网络用于自然语言处理(Ask Me Anything: Dynamic Memory Networks for Natural Language Processing.)

[5] Yoon Kim, et al. 角色意识的神经语言模型(Character-Aware Neural Language Models.)

[6] Jason Weston, et al. 走向人工智能-完成问题回答:一组前提玩具任务(Towards AI-Complete Question Answering: A Set of Prerequisite Toy Tasks.) (bAbI 任务)

[7] Karl Moritz Hermann, et al. 教机器阅读和理解(Teaching Machines to Read and Comprehend.)(CNN/每日邮件完形风格问题)

[8] Alexis Conneau, et al. 非常深度卷曲网络用于自然语言处理(Very Deep Convolutional Networks for Natural Language Processing.) (在文本分类中当前最好的)

[9] Armand Joulin, et al. 诡计包用于有效文本分类(Bag of Tricks for Efficient Text Classification.)(比最好的差一点,但快很多)

2015-06-11 10:44:46 dcxhun3 阅读数 830
  • 深度学习30天系统实训

    系列教程从深度学习核心模块神经网络开始讲起,将复杂的神经网络分模块攻克。由神经网络过度到深度学习,详解深度学习中核心网络卷积神经网络与递归神经网络。选择深度学习当下流行框架Tensorflow进行案例实战,选择经典的计算机视觉与自然语言处理经典案例以及绚丽的AI黑科技实战,从零开始带大家一步步掌握深度学习的原理以及实战技巧。课程具体内容包括:神经网络基础知识点、神经网络架构、tensorflow训练mnist数据集、卷积神经网络、CNN实战与验证码识别、自然语言处理word2vec、word2vec实战与对抗生成网络、LSTM情感分析与黑科技概述。

    14362 人正在学习 去看看 唐宇迪

作为一枚对机器学习有基础,但对深度学习一无所知的DL-er。就这样在深度学习的浪潮下,走上了Dl的探索道路。

现在就开启学习记录之旅。。。。

看到下面这些推荐,知道我我入门的角度是对的,因为这些都是热推荐,继续caffe和UFLDL----->go!

From知呼:http://www.zhihu.com/question/26006703

我入门CV时清华的朋友给的资料,帮助十分大!十分适合新手入门!
我是本科EE入门的,所以应该没有底子比我差的了。

0、Andrew Ng的机器学习前四章的内容(线性回归与逻辑回归)
英文能力足够推荐英文版:openclassroom.stanford.edu
(中文版对应网易公开课v.163.com/special/openc)

1、CMU Advanced Introduction to Machine Learning PPT: cs.cmu.edu/~epxing/Clas

这是一门Machine Learning课程中讲到CNN的部分

2、CAFFE: caffe.berkeleyvision.org

CAFFE是一个常用的deep learning的软件工具,其页面上有deep learning的tutorial材料,同时想要深入了解具体实现的话可以直接阅读源代码

3. UFLDL: ufldl.stanford.edu/wiki

这是我做computer vision的同学推荐的学习deep learning在CV中应用的tutorial

 

 

2017-07-05 19:49:07 jiaxiaoit 阅读数 428
  • 深度学习30天系统实训

    系列教程从深度学习核心模块神经网络开始讲起,将复杂的神经网络分模块攻克。由神经网络过度到深度学习,详解深度学习中核心网络卷积神经网络与递归神经网络。选择深度学习当下流行框架Tensorflow进行案例实战,选择经典的计算机视觉与自然语言处理经典案例以及绚丽的AI黑科技实战,从零开始带大家一步步掌握深度学习的原理以及实战技巧。课程具体内容包括:神经网络基础知识点、神经网络架构、tensorflow训练mnist数据集、卷积神经网络、CNN实战与验证码识别、自然语言处理word2vec、word2vec实战与对抗生成网络、LSTM情感分析与黑科技概述。

    14362 人正在学习 去看看 唐宇迪

深度学习–caffe试水

深度学习是机器学习研究中的一个新领域,动机是什么?
模拟人脑进行分析学习
目前有很多的深度学习框架,我就先试一试caffe的水,看看水到底有多深。。。
自2006年Hinton和他的学生在science上发表了一篇开启深度学习研究的文章—《Reducing the Dimensionality of Data with Neural Networks》,深度学习火得一发不可收拾。。。
深度学习算法采用大量的卷积层,利用空间相对关系来减少参数数目以提高训练性能
从生物意义上的神经网络模型到人工神经网络模型,bp神经网络,卷积神经网络再到深度学习网络的主流框架是如何一步一步发展的呢

生物意义上的神经网络模型

视觉系统的信息处理,可视皮层是分级的,关键词:抽象和迭代
从原始信号,做低级抽象,逐渐向高级抽象迭代

人工神经网络

1.人工神经元模型
三要素:
一组连接
一个求和单元
一个非线性激活函数
2.BP神经网络
正向传播:
输入层到隐层(k=1,2,...,p)
zk=f1(ni=0vkixi)
隐层到输出层(j=1,2,...,m)
yj=f2(pk=0wjkzk)
f1f2是单调上升函数,而且必须是有界函数,因为细胞传递的信号不能是无线增加的,必须有最大值!!!
根据上述公式完成了n维空间向量对m维空间的近似映射(在我理解是对原始数据做了非线性映射,投影到新的空间上)
反向传播:
首先以何种标准进行反向调整网络呢?
我们需要定义误差函数来约束我们的网络,也就是我们的网络想要得到的东西是什么呢?
我们可以使用平方误差也可以根据我们具体的任务来定义损失函数
在这里我们以平方误差为例:
v个样本的误差Ev:
Ev=12mj=1(tvjyvj)2
其中,tvj是我们所期望的输出
对于P个样本,全局误差为
E=12Pv=1mj=1(tvjyvj)2=Pv=1Ev)
3.卷积神经网络
卷积神经网络的权重共享网络结构是卷积神经网络的特色
可以对平移、比例缩放、倾斜或者是共他形式的变形具有高度不变性!!!
话不多说,直接来感受一下经典的网络模型

<一>LeNet网络

我们从LeNet网络模型开始,lenet-5包含输入层在内总共八层,每一层都包含多个参数(权重)
input->convolutions->subsampling->convolutions->subsampling->full connection->full connection->gaussian connections
第一层:输入层,图像大小为32*32
第二层:卷积层,6个feature map,5*5大小的卷积核,每个feature map为(32-5+1)*(32-5+1),即6*28*28
通过卷积运算,使原始信号特征增强,并且降低噪音,不同的卷积核能够提取到不同的特征
第三层:下采样层,2*2的下采样,总共有6*14*14个feature map
下采样层的池化方式通常有两种:一种是选择pooling窗口中的最大值作为采样值,即最大值池化;二是将pooling窗口中的所有值相加取平均值作为采样值,即均值池化
第四层:卷积层,总共16个feature map,分别是上一层的6个feature map的组合
第五层:有一个下采样层,下采样层的目的是为了降低网络训练参数以及模型的过拟合程度
第六层:有一个卷积层,总共120个feature map,每个map都是上一层16个feature map的组合
第七层:全连接层,正切函数
xi=f(ai)=Atanh(sai)
第八层:输出层也是全连接层,一共10个节点,分别代表数字0-9,
yi=j(xjwij)2
我们在mnist数据集上对该模型进行了学习
下面是训练过程:
首先是准备训练、测试数据
执行./data/mnist/get_mnist.sh
该脚本会从网址上下载样本库并进行解压缩
之后将下载的数据集转化成caffe能够处理的数据格式lmdb
执行./examples/mnist/create_minist.sh
生成模型所需的数据之后就是训练模型了
LeNet的网络定义在lenet_train_test.prototxt文件中
训练网络,我们需要运行./examples/mnist/train_lenet.sh
该脚本执行的内容其实是:
./build/tools/caffe train –solver=examples/mnist/lenet_solver.prototxt
solver.prototxt是参数配置文件
训练开始:
train
训练完成:
finished
测试:
执行example里自带的test
./build/tools/caffe.bin test -model=examples/mnist/lenet_train_test.prototxt -weights=examples/mnist/lenet_iter_10000.caffemodel
test
打印出loss和accuracy曲线:
由于我是在服务器上跑的,没有图形界面,所以无法plot图,后续我在自己的电脑上画一个吧
不过方法的话 是可行的 小伙伴已经亲测过了
我们想要打印训练日志的话,可以使用caffe自带的log脚本,在train.sh里将保存log的脚本加入,
log
这样便可以生成log日志,使用caffe中自带的tools/extra/parse_log.sh以及plot_traing_log.py.example来plot各种loss和accuracy曲线

ok!先到这里吧,后续再更新。。。

2017-05-22 10:52:50 lqfarmer 阅读数 22593
  • 深度学习30天系统实训

    系列教程从深度学习核心模块神经网络开始讲起,将复杂的神经网络分模块攻克。由神经网络过度到深度学习,详解深度学习中核心网络卷积神经网络与递归神经网络。选择深度学习当下流行框架Tensorflow进行案例实战,选择经典的计算机视觉与自然语言处理经典案例以及绚丽的AI黑科技实战,从零开始带大家一步步掌握深度学习的原理以及实战技巧。课程具体内容包括:神经网络基础知识点、神经网络架构、tensorflow训练mnist数据集、卷积神经网络、CNN实战与验证码识别、自然语言处理word2vec、word2vec实战与对抗生成网络、LSTM情感分析与黑科技概述。

    14362 人正在学习 去看看 唐宇迪


    深度学习是人工神经网络的一个分支,具有深度网络结构的人工神经网络是深度学习最早的网络模型。1943年,美国数学家沃尔特·皮茨(W.Pitts)和心理学家沃伦·麦克洛克(W.McCulloch)首次提出了人工神经网络这一概念,并使用数学模型对人工神经网络中的神经元进行了理论建模,开启了人们对人工神经网络的研究 [1]。1949年,著名心理学家唐纳德·奥尔丁·赫布(D. Olding Hebb)给出了神经元的数学模型,提出了人工神经网络的学习规则[2]。1957年,著名人工智能专家弗兰克·罗森布莱特(F.Rosenblatt)提出了感知器(Perceptron)人工神经网络模型,并提出采用Hebb学习规则或最小二乘法来训练感知器的参数,感知器是最早且结构最简单的人工神经网络模型。随后,弗兰克·罗森布莱特又在Cornell university Aeronautical laboratory通过硬件实现了第一个感知器模型:Mark I,开辟了人工神经网络的计算机向硬件化发展方向[2]。感知器是一种前向人工神经网络,采用阈值型激活函数,只含一层神经元。通过训练网络权值,对于一组输入响应,感知器可以得到1或0的目标输出,从而实现分类输入响应的目标。但感知器的分类能力非常有限,只能够处理简单的二元线性分类,受限于其只具有一层神经网络,它不能处理线性不可分问题,比如异或问题。

    1980年,基于传统的感知器结构,深度学习创始人,加拿大多伦多大学教授杰弗里·辛顿(G. Hinton)采用多个隐含层的深度结构来代替代感知器的单层结构,多层感知器模型(Multi_Layer Perceptron)是其中最具代表性的,而且多层感知器也是最早的深度学习网络模型[3]。1974年,Paul Werbos提出采用反向传播法来训练一般的人工神经网络,随后,该算法进一步被杰弗里·辛顿、燕·勒存(Y. LeCun)等人应用于训练具有深度结构的神经网络[3]。反向传播法根据神经网络输出层的计算误差来调整网络的权值,直到计算误差收敛为止[4]。但是,反向传播法训练具有多隐含层的深度网络的网络参数的学习性能并不好,因为具有多隐含层的深度网络的网络参数的训练问题是一个非凸问题,基于梯度下降的反向传播法很容易在训练网络参数时收敛于局部极小值。此外,反向传播法训练网络参数还存在很多实际问题,比如需要大量的标签样本来训练网络的权值,多隐含层的神经网络权值的训练速度很慢,权值的修正随着反向传播层数的增加逐渐削弱等。

    面对采用反向传播法来训练具有多隐含层的深度网络的网络参数时存在的缺陷,一部分研究人员开始探索通过改变感知器的结构来改善网络学习的性能,由此产生了很多著名的单隐含层的浅层学习模型,如SVM、logistic regression、Maximum entropy model和朴素贝叶斯模型等。浅层学习模型能够有效地解决简单或者具有复杂条件限制的问题,但受限于只含一个隐含层,所以浅层学习模型特征构造的能力有限,不能有效处理包含复杂特征的问题[5]。为了同时解决具有多隐含层的深度网络在参数训练时存在的缺陷和浅层网络特征构造能力有限的问题,一些研究人员开始尝试采用新的参数训练方法来训练多隐含层的深度网络。

    1984年,日本学者福岛邦彦提出了卷积神经网络的原始模型神经感知机(Neocognitron)[7]。1998年,燕·勒存(Y. LeCun)提出了深度学习常用模型之一卷积神经网络(Convoluted Neural Network, CNN)[3,7]。2006年,杰弗里·辛顿(G. Hinton)提出了深度学习的概念,随后与其团队在文章《A fast Learning Algorithm for Deep Belief Nets》中提出了深度学习模型之一,深度信念网络,并给出了一种高效的半监督算法:逐层贪心算法,来训练深度信念网络的参数,打破了长期以来深度网络难以训练的僵局[5,6]。从此,深度学习的大门打开,在各大政府、高校和企业中掀起了研究深度学习的大浪潮。2009年,Yoshua Bengio提出了深度学习另一常用模型:堆叠自动编码器(Stacked Auto-Encoder,SAE),采用自动编码器来代替深度信念网络的基本单元:限制玻尔兹曼机,来构造深度网络。

    约翰·霍普菲尔德(John Hopfield)在1982提出了Hopfield网络,是最早的递归神经网络(Recurrent Neural Network,RNN)。因Hopfield网络实现困难,没有合适的应用场景,86年后逐渐被前向神经网络取代。1990年,出现了Elman&Jordan SRN两种新的RNN网络,同样因为没有合适的应用场景,很快淡出了研究人员视线。Dalle Molle人工智能研究所的主任Jurgen Schmidhuber在论文《THE VANISHING GRADIENT PROBLEM DURING  recurrent neural networks and problem solutions》提出了LSTM,促进了循环神经网络的发展,特别是在深度学习广泛应用的今天,RNN(LSTM)在自然语言处理领域,如机器翻译、情感分析、智能对话等,取得了令人惊异的成绩。

    深度学习自2006年产生之后就受到科研机构、工业界的高度关注。最初,深度学习的应用主要是在图像和语音领域。从2011年开始,谷歌研究院和微软研究院的研究人员先后将深度学习应用到语音识别,使识别错误率下降了20%-30%[4,7]。2012年,杰弗里·辛顿的学生IIya Sutskever和Alex Krizhevsky在图片分类比赛ImageNet中,使用深度学习打败了Google团队,深度学习的应用,使得图片识别错误率下降了14%。2012年6月,谷歌首席架构师Jeff Dean和斯坦福大学教授AndrewNg主导著名的GoogleBrain项目,采用16万个CPU来构建一个深层神经网络,并将其应用于图像和语音的识别,最终大获成功。此外,深度学习在搜索领域也获得广泛关注。如今,深度学习已经在图像、语音、自然语言处理、CTR预估、大数据特征提取等方面获得广泛的应用。

参考文献:

[1]   周开利, 康耀红. 神经网络模型及其Matlab仿真[M]. 程序设计. 北京: 清华大学出版社, 2005:43.

[2]   F. Rosenblatt. Perceptron Simulation Experiments[J]. Proceedings of the Ire, !960, 48(3): 301-309.

[3]   孙志军, 薛雷, 许阳明, 王正. 深度学习研究综述[J]. 计算机应用研究, 2012, 29(8):2806-2810.

[4]   G. Dahl, D. Yu, L. Deng. Context-dependent pre-trained deep neural networks for large-vocabulary speech recognition[J]. IEEE Transactions on Audio, Speech, and Language Processing, 2012,20(1):30-42.

[5]   G. E. Hinton, S. Osindero, Y. W Teh. A Fast Learning Algorithm for Deep Belief Nets[J]. Neural Computation, 2006, 18(7): 1527-1554.

[6]   M. Ranzato, Y. Boureau, S. Chopra, and Y. LeCun. A unified energy-based framework for unsupervised learning[J]. Proc. Conference on AI and Statistics (AI-Stats), 2007.

[7]   刘建伟, 刘媛, 罗雄麟. 深度学习研究进展[J]. 计算机应用研究, 2014, 31(7):1921-1942.

更多深度学习在NLP方面应用的经典论文、实践经验和最新消息,欢迎关注微信公众号“深度学习与NLPDeepLearning_NLP”或扫描二维码添加关注。


2019-07-21 21:28:03 weixin_42409052 阅读数 1077
  • 深度学习30天系统实训

    系列教程从深度学习核心模块神经网络开始讲起,将复杂的神经网络分模块攻克。由神经网络过度到深度学习,详解深度学习中核心网络卷积神经网络与递归神经网络。选择深度学习当下流行框架Tensorflow进行案例实战,选择经典的计算机视觉与自然语言处理经典案例以及绚丽的AI黑科技实战,从零开始带大家一步步掌握深度学习的原理以及实战技巧。课程具体内容包括:神经网络基础知识点、神经网络架构、tensorflow训练mnist数据集、卷积神经网络、CNN实战与验证码识别、自然语言处理word2vec、word2vec实战与对抗生成网络、LSTM情感分析与黑科技概述。

    14362 人正在学习 去看看 唐宇迪

前言(广告)

   《动手学习深度学习》是 李沐博士和阿斯顿·张博士等人写的一本入门深度学习的教程,是目前广受好评的最好的入门深度学习教材之一,豆瓣评分高达9.5,且在B站有配套的视频教程,超级适合没有基础的小伙伴用来入门深度学习。本文是对于书中关于环境搭建这一小节的详细描述和补充,希望小伙伴们可以通过本文在较短的时间内搭建好开发环境,从而快速开启自己的深度学习之旅。小伙伴们有什么看不明白的地方,或者发现文中有什么错误,欢迎留言。当然,除了留言外,小伙伴们也可以加入 MXNet / Gluon学习交流群(QQ群)和大家一起讨论、交流、学习。
在这里插入图片描述

环境搭建的整体步骤

搭建《动手学习深度学习》开发环境的步骤如下:
1.确保自己的电脑和操作系统满足MXNet的要求。
2.安装miniconda。(不推荐anaconda,anaconda的功能miniconda都有,但是anaconda自带很多用不到的软件包,占很大空间)
3.如果电脑有支持cuda的显卡,那么就需要安装较新的显卡驱动,没有则跳过这一步。
4.使用conda创建环境。
5.在新建的conda环境中安装相应的软件包(cuda, mxnet, matplotlib, pandas等)。
6.验证安装。

对电脑和操作系统的要求

《动手学习深度学习》使用的深度学习框架是MXNet,对于电脑和操作系统有如下要求:
1.操作系统是64位的Windows 7或者Windows 10, 或者64位的Linux版本(如Ubuntu 16.04, Ubuntu 18.04,centos 7等); 不能是32位的操作系统。
2.拥有支持cuda的NVIDIA显卡。(可选,可以没有显卡,只用CPU也可以)
总结来讲就是你电脑的系统必须是64位的,不能是32位的,因为mxnet没有32位的安装包。电脑有支持cuda的NVIDIA显卡是最好的,点击上面的链接(点击上面的“支持cuda的NVIDIA显卡”这几个字)可以查看你的显卡是否支持cuda。

安装miniconda

Windows下安装

首先下载最新的Windows版本的miniconda 3。推荐到清华大学开源镜像站下载,不要到官网下载,因为官网下载速度非常慢。下载方法如下:
1.首先复制下载地址 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 到浏览器中打开,然后下拉到最底部,找到下面这个软件包:

Miniconda3-latest-Windows-x86_64.exe

单击它便可以将最新的64位miniconda3的安装包下载到本地。下载好后双击运行安装即可。需要注意的是,安装过程中有一步是询问你是否将miniconda添加到环境变量(Add Anaconda to the system PATH environment variable)。到这一步的时候,必须把添加环境变量这一个选项前面那个勾去掉,即不添加环境变量。miniconda官方也不建议添加环境变量,因为有可能和其它的库冲突。其它的都选择默认即可,点击安装,等待安装完成。
安装完成后,打开anaconda prompt这个终端(安装miniconda的时候会自动安装到你电脑上),然后分别执行如下命令,将conda和pip的软件源修改成清华的源,这样的话,使用conda下载安装软件包时会快很多。

conda  config  --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda  config  --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda  config  --set show_channel_urls yes

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
Linux下的安装

下面的安装过程适用Ubuntu,centos等Linux发行版。
1.首先复制下载地址 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 到浏览器中打开,然后下拉到最底部,找到下面这个软件包:

Miniconda3-latest-Linux-x86_64.sh

单击它便可以将最新的64位miniconda3的安装包下载到本地。假设你把安装包保存到了下载这个文件夹,打开终端,执行如下两条命令来安装:

cd   下载
bash  Miniconda3-latest-Linux-x86_64.sh

执行上面的第二条的安装命令时,首先会弹出一个软件协议条款让你阅读,这时候你直接按下Ctrl+C便可以跳过阅读过程,直接按照提示,输入yes,然后按回车键,同意软件协议条款。接下来继续按回车,将miniconda安装到电脑上。安装好之后,提示如下:

Do you wish the installer to initialize Miniconda3
by running conda init? [yes|no]

这一步一定要输入yes,不然安装好后没办法在终端中使用miniconda。输入yes,按下回车键,miniconda便成功安装到你电脑上了。重启终端之后,你便可以使用miniconda了。
重启终端,然后分别执行如下命令,将conda和pip的软件源修改成清华的源,这样的话,下载安装软件会快很多:

conda  config  --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda  config  --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda  config  --set show_channel_urls yes

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

再次重启终端之后,你会发现每次打开终端默认都会自动进入到miniconda的base环境中,终端中多了“base”字样。这样会拖慢终端打开速度,并且有可能干扰到其它软件的安装。要退出的话,必须每次打开终端之后先执行conda deactivate命令,让人很难受。执行如下命令,便可以解决终端每次打开都进入conda的base环境的问题:

conda config --set auto_activate_base false

安装比较新的显卡驱动

显卡驱动应该安装哪个版本,其实取决于你想使用哪个版本的cuda。如果想用最新的cuda 10或者cuda 10.1,那么驱动版本号不能低于某个版本。NVIDIA官方给的数据如下图所示:
在这里插入图片描述
从上图可以看到,在Linux下,cuda 10.1对于显卡驱动版本的要求是>=418.39, 也就是说,在Linux下,如果你安装的显卡驱动的版本低于418.39,那么你将无法使用cuda 10.1。如果想要使用cuda 10.1,那么你的Linux系统安装的驱动版本必须等于或者大于418.39。同理,从表中可以看到,如果你要在Windows 下使用cuda 10.1,那么安装的显卡驱动的版本号必须等于或者大于418.96你才能使用cuda 10.1。
好了,上面扯了那么多,下面我们来正式进入到显卡驱动安装的环节。

Windows下的安装

Windows下的显卡驱动安装很简单,打开NVIDIA官网的显卡驱动下载地址,然后根据自己的操作系统,显卡型号,将最新的稳定版的显卡驱动下载下来双击运行,然后全部采用默认设置,按照提示便可以完成安装。这里选择的是安装最新的稳定版本的显卡驱动,因为NVIDIA官网最新稳定版的显卡驱动,肯定可以满足所有cuda版本对于显卡驱动版本的要求。

Ubuntu下的显卡驱动安装

注:这里将要说的安装方法,适用于Ubuntu 16.04和Ubuntu 18.04。其它的Ubuntu版本没测试过。
为Ubuntu安装NVIDIA驱动主要有两种方式,一种是到NVIDIA官网下载对应显卡型号的驱动的.run文件,然后按照NVIDIA官网的说明安装即可。这种安装方法失败率很高,并且安装过程十分繁琐,不推荐使用这种方式。另外一种是通过添加Ubuntu官方维护的NVIDIA显卡驱动源,然后使用apt来安装即可,推荐使用这种方法。注意,采用第二种方法时,由于Ubuntu官方维护的NVIDIA显卡驱动源在国外,因此下载速度十分缓慢,安装显卡驱动需要几个小时都有可能,而且80%的概率会因为网速问题导致显卡驱动安装失败。建议安装显卡驱动这个步骤在北京时间早上7点到9点之间进行,那个时候在国内访问该软件源的网速是最快的,几分钟就能安装好。下面是采用第二种方法来安装显卡驱动的具体的步骤。
1.执行如下命令将Ubuntu官方维护的NVIDIA显卡驱动软件源添加到系统中:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

2.执行如下命令,查看适合自己电脑的显卡驱动:

sudo ubuntu-drivers devices

执行上面的命令之后,会显示如下内容:

driver   : nvidia-340 - distro non-free
driver   : nvidia-driver-410 - third-party free
driver   : nvidia-driver-418 - third-party free
driver   : nvidia-driver-415 - third-party free
driver   : nvidia-driver-390 - distro non-free
driver   : nvidia-driver-430 - third-party free recommended
driver   : nvidia-driver-396 - third-party free
driver   : xserver-xorg-video-nouveau - distro free builtin

我们可以看到第六行的nvidia-driver-430的最后带有“recommended”字样,即系统推荐我们安装该版本的显卡驱动,这时候我们只需要执行如下命令来安装即可:

sudo apt install nvidia-driver-430

电脑不同推荐的版本有可能不一样,因此到时候你安装带有recommended的版本即可。安装完显卡驱动之后,重启即可。重启之后,你在Ubuntu里打开NVIDIA X Server Settings这个软件(安装显卡驱动的时候自动给装上的),便能看到你显卡驱动的详细信息了。 到此显卡驱动安装完成。

arch Linux下的显卡驱动安装

打开终端,执行如下不完整的命令:

sudo pacman  install nvidia-

然后会显示一系列显卡驱动版本号,选择最新的来安装即可。比如,如果显示的驱动版本,最大的是430,那么接着执行如下命令:

sudo pacman install nvidia-430

便可以安装。

环境搭建

Windows下的环境搭建

搭建一个环境,首先你要确定你需要哪些软件包,根据《动手学习深度学习》这本书里面描述,首先我们需要到下载全部代码的压缩包,下载地址: https://zh.d2l.ai/d2l-zh-1.0.zip
下载完成后,将压缩包解压,然后打开里面的environment.yml的文件,可以看到如下内容(内容可能会因为更新而有所不同,具体以你下载的为准):

name: gluon
dependencies:
- python=3.6
- pip:
  - mxnet==1.4.0
  - d2lzh==0.8.11
  - jupyter==1.0.0
  - matplotlib==2.2.2
  - pandas==0.23.4

可以看到这个环境的名称是gluon,使用的是Python 3.6。因此我们先使用miniconda创建一个名为gluon的环境。在Windows下,首先打开anaconda prompt这个终端,然后在prompt终端里执行如下命令来创建一个使用Python 3.6的,名为gluon的环境:

conda create -n gluon python=3.6

Python具体该使用哪个版本,以你下载下来的environment.yml文件里的为准,我这里下载下来的environment.yml文件里面使用的是Python 3.6,因此创建的环境使用的就是Python 3.6。创建完成之后,执行如下命令来激活gluon环境:

conda activate gluon

接下来该安装MXNet了,MXNet应该安装哪个版本,具体由你电脑的硬件决定。
1.如果你的电脑的CPU是Intel 的酷睿系列,或者是Intel的至强系列,显卡是NVIDIA的显卡,且支持cuda,那么建议安装最新版的的同时支持mkl和gpu的MXNet。分别执行如下命令,先安装最新版的mkl和cuda 10.1,然后安装最新版的支持mkl和cuda 10.1的gpu版的MXNet:

conda install mkl
conda install cudatoolkit=10.1
pip install mxnet-cu101mkl

这里选择安装使用cuda 10.1,因为同等条件下,cuda 10或者cuda 10.1的gpu利用率比cuda 9或者cuda 9.2高出接近三倍,意味着训练速度也更快。
2.如果你的CPU是AMD的CPU,但是显卡是支持cuda的NVIDIA显卡,那么建议安装支持gpu的最新版的MXNet,分别执行如下命令,先安装cuda,然后安装MXNet:

conda install cudatoolkit=10.1
pip install mxnet-cu101

3.如果你的CPU是Intel的酷睿系列CPU,但是没有支持cuda的NVIDIA显卡,那么建议安装支持mkl的CPU版MXNet,因为,支持mkl的CPU版的MXNet比不支持mkl的CPU版的MXNet训练速度在特定条件下能快几十倍。分别执行如下命令,先安装mkl,后安装最新版的支持mkl的CPU版的MXNet:

conda install mkl
pip install mxnet-mkl

4.如果你电脑的CPU是AMD的CPU,并且没有支持cuda的NVIDIA显卡,那么建议直接安装CPU版的MXNet,执行如下命令来进行安装:

pip install mxnet

到此,MXNet安装完成。接下来,分别执行如下命令,来安装environment.yml文件中没安装的软件包:

pip install d2lzh==0.8.11
pip install jupyter==1.0.0
pip install matplotlib==2.2.2
pip install pandas==0.23.4

上面的软件版本号,同理也是以你下载下来的environment.yml文件里面的为准。虽然版本号不同,但是安装命令是完全一样的。

ubuntu下的环境搭建

Ubuntu下的环境搭建过程和Windows下的基本上是一模一样,在Ubuntu下,你只需要按照上面介绍的在Windows下搭建环境的方法来搭建环境即可。唯一的区别是,Windows下,是在anaconda prompt这个终端下执行命令,而Ubuntu则是直接在系统自带的终端下执行命令。从这里我们可以看到,使用conda来搭建环境的好处是跨平台,不同平台下搭建环境的步骤是一模一样的基本上。

验证安装

Windows下验证安装

1.验证同时支持mkl和gpu的MXNet是否安装成功
如果你安装的是同时支持mkl和gpu版的MXNet,重新打开anaconda prompt终端,依次执行如下命令来验证是否成功安装:

conda activate gluon
python
import mxnet as mx

如果到这一步没有出错,那么证明MXNet已经安装成功。接着输入如下代码,验证MXNet是否能成功利用gpu进行计算:

 a = mx.nd.ones((2, 3), mx.gpu())
 b = a * 2 + 1
b.asnumpy()

如果输出如下,证明gpu版的MXNet安装成功,并且能够利用gpu进行计算:

array([[ 3.,  3.,  3.],
       [ 3.,  3.,  3.]], dtype=float32)

2.验证仅支持mkl的MXNet或者仅支持CPU的MXNet是否安装成功
如果你安装的是仅支持mkl的MXNet或者仅支持CPU的MXNet,重新打开anaconda prompt,依次执行如下命令来验证是否成功安装:

conda activate gluon
python
import mxnet

如果执行上面的命令没有出错,则证明MXNet安装成功。

Ubuntu下验证安装

在Ubuntu下验证MXNet是否安装成功和在Windows下的步骤基本上是一模一样的,唯一的区别是,在Windows下,命令需要在anaconda prompt终端中执行,而在Ubuntu下,命令是在系统自带的终端中执行。

到此,《动手学习深度学习》代码运行环境搭建完毕。

常见问题解答(持续更新)

1.执行创建环境命令conda create -n gluon python=3.6命令时由于网络原因出错

这里出错有两种,一种出错提示如下图:
在这里插入图片描述
出现上面的原因主要是因为你的网络连接有问题,或者网线没插好,WiFi掉线了,网络波动之类的。解决办法就是多执行几次conda create -n gluon python=3.6命令就可以了,直到环境创建成功为止。
另外一种出错提示如下图所示:
在这里插入图片描述
出现这种错误的可能原因是因为你所在的网络环境不支持conda创建环境时从清华镜像源下载软件包。解决办法就是将conda的软件源重新设置为默认的官方软件源。Windows下,直接打开anaconda prompt终端,然后执行如下命令即可:

conda   config   --remove-key   channels

在Linux下,则是直接在系统子自带的终端中执行上述命令即可。
执行完上述命令之后,conda的软件源就恢复到了官方的软件源,这时候再执行创建环境的命令conda create -n gluon python=3.6即可。

2.mxnet需要安装cudnn吗?

不需要,mxnet已经内置了cudnn,因此不需要安装cudnn,只需要安装cuda。

3.如何完全删除按照本文搭建起来的环境?

执行如下命令即可完全删除:

conda remove -n gluon --all

然后按照提示,输入y,即可完全删除环境。

4.如何安装其他版本的mxnet?

只需要在执行安装mxnet命令时指定版本号即可,比如你要安装1.4.1版本的只支持CPU版本的mxnet,那么执行如下命令即可:

pip install mxnet==1.4.1
5.安装遇到如下错误,怎么解决

在这里插入图片描述
出现上述错误是因为你使用pip安装mxnet时安装的版本不对,比如安装比较老的版本,这些版本已经被mxnet官方给删除了,不存在pip库中,只需要安装存在的版本即可。

什么是深度学习

阅读数 182

没有更多推荐了,返回首页