深度学习轻松学:核心算法与视觉实践
  • 推荐3
  • 收藏9
  • 浏览4.2K

深度学习轻松学:核心算法与视觉实践

冯超 (作者) 

  • 书  号:978-7-121-31713-2
  • 出版日期:2017-07-01
  • 页  数:360
  • 开  本:16(170*240)
  • 出版状态:图书立项
  • 维护人:郑柳洁
纸质版 ¥79.00
《深度学习轻松学:核心算法与视觉实践》介绍了深度学习基本算法和视觉领域的应用实例。书中以轻松直白的语言,生动详细地介绍了深层模型相关的基础知识,并深入剖析了算法的原理与本质。同时,书中还配有大量案例与源码,帮助读者切实体会深度学习的核心思想和精妙之处。除此之外,书中还介绍了深度学习在视觉领域的应用,从原理层面揭示其思路思想,帮助读者在此领域中夯实技术基础。
《深度学习轻松学:核心算法与视觉实践》十分适合对深度学习感兴趣,希望对深层模型有较深入了解的读者阅读。
深入剖析卷积神经网络核心:全连接层和卷积层
深入分析Caffe源码实现架构,了解框架背后的运行机理
详尽介绍网络结构与训练细节,解密复杂运算的基本原理
经典实践场景:图像语意分割,图像生成。GAN模型的详细分析与推导
样例代码采用C++和Python两种语言编写
语言轻松幽默易于理解,特别适合初学者快速掌握深度学习核心思想
从你拿起这本书的那一刻开始,我就和你一起踏上了这段有关深度学习的冒险之旅。本书中有简单直白的叙述,也有复杂冗长的证明;有调皮的调侃,也有深刻的沉思。所有的一切,都是为了帮助你更轻松地对深度学习有更多了解、更多感悟。
本书的前身是我在知乎上的《无痛的机器学习》专栏(https://zhuanlan.zhihu.com/hsmyy)。作为在路上前进的一枚“小白”,我一直有写读书笔记的习惯。早期,我会把笔记写在阅读的文献上,在这些篇章的关键处做标记、写好注释。时间一长,当我想再读这些曾经阅读过的文献时,那些注释竟然变得莫名其妙起来。当初难以理解的概念又回到难以理解的状态,于是我不得不再次阅读原文,重新获得其中的感悟,这样周而复始,一次次在这个循环中打转。
后来,我选择彻底甩掉曾经阅读过的文献——既然它给我带来了那么多痛苦,为什么每次回顾时还要与它相对?于是我开始尝试将文献的所有内容重新组织成一篇短小的文章,文章中列出文献中的关键内容。这种文章简明扼要、直击重点,看着很清爽,可以帮助我快速回顾阅读的内容,又不用再回到原文,所以这种方法很快就替代了以前的那种方法。
再后来,我发现了新的问题。虽然我摆脱了晦涩的论文内容,但摆脱不了自己重述的文字。尤其是这些浓缩后的“精华”文字,理解起来并不比原始文献强多少,而且由于缺少很多细节,一旦遇到理解困难的状况,我不得不回到原文搜寻答案,于是这样的痛苦又得经历一次。
这时,我想起了父亲曾对我的教导:“书要先读厚,然后再读薄”。所谓的读厚,就是给阅读的书增加更多的内容,例如注释、自己的理解等。当自己能完全掌握书中的内容时,再将书中的细枝末节慢慢砍掉,将主体思想保留在心中,这就是读薄的过程。这样就完成了对一本书的深入阅读,其中读薄的过程和《倚天屠龙记》中张三丰教授张无忌太极拳剑的过程很相似。如果站在信息论的角度看,所谓的“重意不重形”,可以看作保证低频信息的正确性,依概率分布生成高频信息的一种“招式”生成模式。能达到这等境界,方可谓之大成。
对我来说,面对潮水般涌来的深度学习知识,想淡定从容应对是不可能的。也就是说,一开始就把书读薄是不可能的。所以,浓缩版的总结文章也慢慢被我否定了。那么只剩下一个选择了,就是把书读厚,把文章写得拖沓冗长一些。于是我开始尝试用拖沓但细致的语言做文献的总结,经过一次次地尝试,文章的易读性确实有了明显提升,因为文章描述不清楚而回看原文的次数也越来越少。与此同时,我发现写作这个过程让我对问题有了更深入的理解。
拖沓式写法通过写作驱动,更容易发现知识点与知识点之间的沟壑。要想详细描述自己阅读的内容,就得确定文章中的逻辑自己是否真的明白了。有时探究这些逻辑所花费的时间远比自己想象得长,但是它确实让我感受到了进步与成长。
渐渐地,拖沓式文章越写越多,我也逐渐将其中一些文章公开,希望能够与大家分享:希望大家能和我对同一个问题产生共鸣,同时也可以在阅读中指出文章中的错误。
不到一年,我见证了我写的文章被越来越多的人关注、讨论,在交流的过程中我收获了又一次成长。
在完成了几十篇文章后,本书的编辑郑柳洁女士联系到我,问我是否有兴趣将这些文章集结,变成一本出版印刷的书。在此之前我并没有仔细想过这件事儿,但是她的建议让我觉得这也许是又一次证明自己、使自己成长的机会,而且出版书籍在我心中也是一件神圣的事儿,于是我接受了这个建议,开始了整理书稿的工作。
整理书稿并没有想象中那么简单。网上的文章都是单独出现的,而书中的文章需要有一定的整体性;网上的文章可以用比较随意的语言叙述,而书中的语言需要尽量正式、客观。这些挑战使我修改了放在网络上的很多文字,为了确保表达清晰准确、语言通顺流畅,有些文章基本被重新写了一遍。整理这些文章花费了很多业余时间,但功夫不负有心人,这项工作被一点点地完成了。
本书主要介绍了深度学习,尤其是卷积神经网络相关的基础知识,以及计算机视觉的部分应用内容。书中既包含深度学习中的基础知识,也包含部分进阶内容,同时也包含一些较新颖的概念与模型,适合不同人群阅读。对初学者来说,本书十分详细地介绍了很多基本概念,对自学入门深度学习很有帮助;对有一定经验的从业人员来说,本书可以梳理领域内的知识点,也可以作为工具书使用。
本书中的示例代码由C++ 和Python 两种语言实现,读者只要对两种语言有基本的了解即可。本书主要使用了Caffe 这个第三方开源框架,在此向Caffe 的作者表示感谢。
现在有很多优秀的开源框架,这些框架各有优劣,但本质上有很多共性。对没有使用过Caffe 的读者来说,阅读本书时不会有大的困扰。
最后聊聊本书的书名。最初想使用“无痛”这个词,无奈这个词太容易引发联想,不适合作为一本严肃的出版物的书名。“学习”这个词自古以来就不是轻松的代名词。“学习”的“习”字曾写作“習”,意思为鸟类挥动翅膀一次次试飞,其中暗含了反复练习的过程;在日语中“学习”被写作“勉強する”,从大家能看懂的两个字就可以看出,学习中的艰辛;在韩语中“学习”又被写作“공부하다”,它前两个字的发音和“恐怖”二字很像,也许当初这个词背后的含义和恐怖有关。这样看来,东北亚的这几个国家都学习这件事都充满了敬畏之心,学习这件事是绝对不会轻松的,更不会是无痛的,经历过多年教育的读者相信也会有体会。
学习的过程充满痛苦,而这是不可避免的。我们每个人在人生的道路上都有过不断探索、不断遇到挫折,然后改进自我,完成进化的体验。就像机器学习中被训练的模型一样,不断地完成预测、找到差距、更新参数,最终达到最优。在这条自我成长的道路上,每一次的失败、每一次的努力都充满了艰辛,然而没有痛苦的积累,就不会有最终快乐的迸发。
人生苦短。虽然人生要经历许多的痛苦,但我们的目标并不是痛苦,而是走向彼岸的快乐。因此,如果能有减少痛苦的良方,大家还是愿意一试。社会的不断发展进步就是探寻减少痛苦的解药,而本书的写作目标也是希望本书能成为各位读者学习路上的解药,在减少痛苦的同时实现心中的目标。
感谢邓澍军、夏龙先生在本书内容创作期间对内容的严格审核并提出宝贵的意见和建议;感谢知乎上各位为《无痛的机器学习》专栏中系列文章指出错误、提出疑问的朋友,是你们让文章变得更严谨;由于本人才疏学浅,行文间难免有所纰漏,望各位读者多多包涵,不吝赐教。最后感谢所有关心、支持我完成这件不易的工作的亲人和朋友。我爱你们!
作者

目录

1 机器学习与深度学习的概念1
1.1 什么是机器学习 1
1.1.1 机器学习的形式. 2
1.1.2 机器学习的几个组成部分. 8
1.2 深度学习的逆袭 9
1.3 深层模型在视觉领域的应用. 13
1.4 本书的主要内容 15
1.5 总结. 17
2 数学与机器学习基础18
2.1 线性代数基础. 18
2.2 对称矩阵的性质 22
2.2.1 特征值与特征向量 22
2.2.2 对称矩阵的特征值和特征向量 23
2.2.3 对称矩阵的对角化 24
2.3 概率论. 25
2.3.1 概率与分布. 25
2.3.2 最大似然估计 28
2.4 信息论基础 31
2.5 KL 散度. 33
2.6 凸函数及其性质 37
2.7 机器学习基本概念. 39
2.8 机器学习的目标函数 42
2.9 总结. 44
3 CNN 的基石:全连接层45
3.1 线性部分. 45
3.2 非线性部分 48
3.3 神经网络的模样 50
3.4 反向传播法 55
3.4.1 反向传播法的计算方法. 55
3.4.2 反向传播法在计算上的抽象. 58
3.4.3 反向传播法在批量数据上的推广. 59
3.4.4 具体的例子. 63
3.5 参数初始化 65
3.6 总结. 68
4 CNN 的基石:卷积层69
4.1 卷积操作. 69
4.1.1 卷积是什么. 69
4.1.2 卷积层效果展示. 73
4.1.3 卷积层汇总了什么 76
4.1.4 卷积的另一种解释 77
4.2 卷积层的反向传播. 79
4.2.1 实力派解法. 80
4.2.2 “偶像派”解法. 84
4.3 ReLU 88
4.3.1 梯度消失问题 89
4.3.2 ReLU 的理论支撑. 92
4.3.3 ReLU 的线性性质. 93
4.3.4 ReLU 的不足. 93
4.4 总结. 94
4.5 参考文献. 94
5 Caffe 入门95
5.1 使用Caffe 进行深度学习训练. 96
5.1.1 数据预处理. 96
5.1.2 网络结构与模型训练的配置. 100
5.1.3 训练与再训练 108
5.1.4 训练日志分析 110
5.1.5 预测检验与分析. 112
5.1.6 性能测试 115
5.2 模型配置文件介绍. 117
5.3 Caffe 的整体结构. 122
5.3.1 SyncedMemory 124
5.3.2 Blob 125
5.3.3 Layer 125
5.3.4 Net 126
5.3.5 Solver 126
5.3.6 多GPU 训练. 127
5.3.7 IO 127
5.4 Caffe 的Layer 128
5.4.1 Layer 的创建——LayerRegistry 128
5.4.2 Layer 的初始化. 130
5.4.3 Layer 的前向计算. 132
5.5 Caffe 的Net 组装流程 133
5.6 Caffe 的Solver 计算流程. 139
5.6.1 优化流程 140
5.6.2 多卡优化算法 142
5.7 Caffe 的Data Layer 145
5.7.1 Datum 结构. 145
5.7.2 DataReader Thread 147
5.7.3 BasePrefetchingDataLayer Thread 148
5.7.4 Data Layer 149
5.8 Caffe 的Data Transformer 150
5.8.1 C++ 中的Data Transformer 150
5.8.2 Python 中的Data Transformer 153
5.9 模型层扩展实践——Center Loss Layer 156
5.9.1 Center Loss 的原理 156
5.9.2 Center Loss 实现. 160
5.9.3 实验分析与总结. 164
5.10 总结. 165
5.11 参考文献. 165
6 深层网络的数值问题166
6.1 ReLU 和参数初始化. 166
6.1.1 第一个ReLU 数值实验. 167
6.1.2 第二个ReLU 数值实验. 169
6.1.3 第三个实验——Sigmoid 171
6.2 Xavier 初始化. 172
6.3 MSRA 初始化. 178
6.3.1 前向推导 178
6.3.2 后向推导 181
6.4 ZCA 182
6.5 与数值溢出的战斗. 186
6.5.1 Softmax Layer 186
6.5.2 Sigmoid Cross Entropy Loss 189
6.6 总结. 192
6.7 参考文献. 192
7 网络结构193
7.1 关于网络结构,我们更关心什么 193
7.2 网络结构的演化 195
7.2.1 VGG:模型哲学. 195
7.2.2 GoogLeNet:丰富模型层的内部结构. 196
7.2.3 ResNet:从乘法模型到加法模型. 197
7.2.4 全连接层的没落. 198
7.3 Batch Normalization 199
7.3.1 Normalization 199
7.3.2 使用BN 层的实验. 200
7.3.3 BN 的实现. 201
7.4 对Dropout 的思考. 204
7.5 从迁移学习的角度观察网络功能 206
7.6 ResNet 的深入分析. 210
7.6.1 DSN 解决梯度消失问题 211
7.6.2 ResNet 网络的展开结构. 212
7.6.3 FractalNet 214
7.6.4 DenseNet 215
7.7 总结. 217
7.8 参考文献. 217
8 优化与训练219
8.1 梯度下降是一门手艺活儿. 219
8.1.1 什么是梯度下降法 219
8.1.2 优雅的步长. 220
8.2 路遥知马力:动量. 225
8.3 SGD 的变种算法 232
8.3.1 非凸函数 232
8.3.2 经典算法的弯道表现. 233
8.3.3 Adagrad 234
8.3.4 Rmsprop 235
8.3.5 AdaDelta 236
8.3.6 Adam 237
8.3.7 爬坡赛. 240
8.3.8 总结. 242
8.4 L1 正则的效果. 243
8.4.1 MNIST 的L1 正则实验. 244
8.4.2 次梯度下降法 246
8.5 寻找模型的弱点 251
8.5.1 泛化性实验. 252
8.5.2 精确性实验. 255
8.6 模型优化路径的可视化. 255
8.7 模型的过拟合. 260
8.7.1 过拟合方案. 261
8.7.2 SGD 与过拟合 263
8.7.3 对于深层模型泛化的猜想. 264
8.8 总结. 265
8.9 参考文献. 265
9 应用:图像的语意分割267
9.1 FCN 268
9.2 CRF 通俗非严谨的入门. 272
9.2.1 有向图与无向图模型. 272
9.2.2 Log-Linear Model 278
9.2.3 条件随机场. 280
9.3 Dense CRF 281
9.3.1 Dense CRF 是如何被演化出来的. 281
9.3.2 Dense CRF 的公式形式. 284
9.4 Mean Field 对Dense CRF 模型的化简 285
9.5 Dense CRF 的推断计算公式 288
9.5.1 Variational Inference 推导 289
9.5.2 进一步化简. 291
9.6 完整的模型:CRF as RNN 292
9.7 总结. 294
9.8 参考文献. 294
10 应用:图像生成295
10.1 VAE 295
10.1.1 生成式模型. 295
10.1.2 Variational Lower bound 296
10.1.3 Reparameterization Trick 298
10.1.4 Encoder 和Decoder 的计算公式. 299
10.1.5 实现. 300
10.1.6 MNIST 生成模型可视化 301
10.2 GAN 303
10.2.1 GAN 的概念. 303
10.2.2 GAN 的训练分析. 305
10.2.3 GAN 实战. 309
10.3 Info-GAN 314
10.3.1 互信息. 315
10.3.2 InfoGAN 模型 317
10.4 Wasserstein GAN 320
10.4.1 分布的重叠度 321
10.4.2 两种目标函数存在的问题. 323
10.4.3 Wasserstein 距离. 325
10.4.4 Wasserstein 距离的优势. 329
10.4.5 Wasserstein GAN 的实现 331
10.5 总结. 333
10.6 参考文献. 334

本书勘误

印次
  • 页码:V  •  行数:2  •  印次: 1

    第二行最后“这几个国家都学习这件事都充满了敬畏之心”改为“这几个国家都对学习这件事充满了敬畏之心”

    teresayin 提交于 2017/11/21 11:33:34
    郑柳洁 确认于 2017/11/30 13:11:29
  • 页码:3  •  行数:2  •  印次: 1

    “人类经过长时间的学习事件”应为“人类经过长时间的学习实践”

    wchknudt 提交于 2018/3/29 17:20:51
    郑柳洁 确认于 2018/4/8 17:41:55
  • 页码:23  •  行数:17  •  印次: 1

    等式左边的向量e的共轭应该改为向量e,与等式右边一样

    HedgehogMan 提交于 2017/9/30 13:31:24
    郑柳洁 确认于 2017/10/10 10:19:20
  • 页码:51  •  行数:17  •  印次: 1

    “它的形式和逻回归(Logistic Regeression)模型”应改为“它的形式和逻辑回归(Logistic Regeression)模型”

    HedgehogMan 提交于 2017/10/12 20:27:14
    郑柳洁 确认于 2017/10/13 10:23:56
  • 页码:70  •  行数:11  •  印次: 1

    该页第2段最后一句话,“从这里就而且可以看出”,改为“从这里就可以看出”

    HedgehogMan 提交于 2017/10/13 10:40:53
    郑柳洁 确认于 2017/10/13 13:35:57

读者评论

  • line 49, in <module> Z2 = Z2.reshape((100, 100))
    ValueError: cannot reshape array of size 0 into shape (100,100)
    3-3这个有问题,一直都这样。

    FreddyChant发表于 2018/11/1 20:48:49
  • 发牢骚归发牢骚,最后为了避免给别人误解,说一下,这本书写的很好。

    caonima发表于 2018/7/26 10:33:51
    • 感谢支持,建议都收到~

      郑柳洁发表于 2018/7/27 12:54:57
  • 还有一个事情,就是有一些代码没有写在书上面,对于没下载源代码的同学读起来比较难受。比如:draw3D这个函数,一开始第3章就使用了。但是书上没有实现,还以为是个库函数呢,费了半天劲。

    caonima发表于 2018/7/26 10:32:47
  • 第51页,书上少印了两对下划线,呵呵,应该是
    def __init__(self, in_num, out_num, lr =0.01):

    atlasgorov发表于 2017/11/24 14:19:39
  • 本书51页的 def init 应该改为def init

    maoger发表于 2017/10/27 9:22:06
    • 不是,源代码是正确的,但是书上少印了两对下划线,呵呵,应该是
      def __init__(self, in_num, out_num, lr =0.01):

      atlasgorov发表于 2017/11/24 14:18:57

下载资源

相关博文

  • 在线课堂实录丨《增强学习入门》—嘉宾:冯超

    在线课堂实录丨《增强学习入门》—嘉宾:冯超

    王一 2017-09-08

    亲爱的博文视点在线课堂的各位同学,大家晚上好,我是冯超,今天非常高兴能跟大家一起来学习一下有关增强学习的一些基础知识。我们今天的这个课程其实是一个相对比较基础的课程,希望能够帮助大家打好这方面的基础,以方便将来大家有机会去学习更多比较深...

    王一 2017-09-08
    1148 0 0 1

相关图书

程序员的AI书:从代码开始

张力柯 潘晖 (作者)

随着AI技术的普及,如何快速理解、掌握并应用AI技术,成为绝大多数程序员亟需解决的问题。本书基于Keras框架并以代码实现为核心,详细解答程序员学习AI算法时的...

¥76.30

解析深度学习:卷积神经网络原理与视觉实践

魏秀参 (作者)

深度学习,特别是深度卷积神经网络是人工智能的重要分支领域,卷积神经 网络技术也被广泛应用于各种现实场景,在许多问题上都取得了超越人类智能的 结果。本书作为该...

¥49.00

自然语言处理理论与实战

白宁超 (作者)

自然语言处理是什么?谁需要学习自然语言处理?自然语言处理在哪些地方应用?相关问题一直困扰<br>着不少初学者。针对这一情况,作者结合教学经验和工程应用编写此书。...

¥79.00

深度学习之PyTorch实战计算机视觉

唐进民 (作者)

计算机视觉、自然语言处理和语音识别是目前深度学习领域很热门的三大应用方向,本书旨在帮助零基础或基础较为薄弱的读者入门深度学习,达到能够独立使用深度学习知识处理计...

¥49.00

21个项目玩转深度学习——基于TensorFlow的实践详解

何之源 (作者)

《21个项目玩转深度学习——基于TensorFlow的实践详解》以实践为导向,深入介绍了深度学习技术和TensorFlow框架编程内容。 通过本书,读者可以训...

¥59.00

TensorFlow:实战Google深度学习框架(第2版)

郑泽宇 (作者)

TensorFlow是谷歌2015年开源的主流深度学习框架,目前已得到广泛应用。本书为TensorFlow入门参考书,旨在帮助读者以快速、有效的方式上手Tens...

¥89.00