被逼无奈,只要将深度学习书变成电子版

原计划是2020年1月份出版的“解剖深度学习原理”,拖到现在2021年3月底了,还没出版,出版社做事太拖拉了,从1月份交终稿,至今没有收到出版社的一个字的反馈意见,从2020年7月就说出这个月出来了,每个月都如此,现在都2021年了。 我确实很生气。后来有人说可以在电子网站平台出版,被逼无奈,只要找了一个网站出版了这个电子版的书。

深度学习的书要么只有理论没有实践,要么就是平台使用教程,市场上缺少理论和代码实现结合的深入剖析深度学习的全面教材, 本书从0代码实现深度学习框架、从底层剖析深度学习原理,看完这书,你会对许多似懂非懂的概念、原理豁然明白,发现深度学习如此简单。 你在其他地方看不到对于转置卷积等深入易懂的分析和代码实现。强烈推荐! 目前市场上没有比我这本更好的深度学习原理教材! 购买链接, 纸质书仍然由电子工业出版社出版(国内平台购买),出版社说3月份印的1000本被送到公共图书馆了,第二批印刷的这个月3月20日印刷好,过几天就在京东、当当网站上看到了。

这是我费了很多心血写从2019年9月份开始写的的1000多页的书,后来出版社说要拆分,所以拆成了2本。后面几章成为另外一本书《强化学习的原理与实现》,但暂时我不想出版,因为需要文字编辑,估计要一周左右, 但我没时间做。出书不赚钱,一年才4000元,所以不想出了。

内容简介和前言

内容简介

本书深入浅出地介绍了深度学习的基本原理和实现过程,用python的numpy库从底层而不是借助于现有的深度学习库从零构建了自己的深度学习库。在介绍基本的Python编程、微积分和概率统计知识基础上,按照深度学习的发展脉络依次介绍了回归模型、神经网络、卷积神经网络、循环神经网络、生成网络等深度学习的核心基础知识,在深入浅出地剖析原理的同时给出了详细的代码实现过程。如同不是教你如何使用武器、手机而是教你如何自己制造武器、手机,本书不是已有深度学习库的使用教程而是剖析如何从0开发深度学习库。这种从0开始的原理与代码实现结合的方式可以使读者更好地理解深度学习的基本原理和流行的深度学习库的设计思想。

前言

从计算机发明以来,使机器具有类人类的智能一直是计算机科学家努力的目标,从1956年提出”人工智能”概念以来,人工智能研究经历了多次的高峰到低谷、低谷到高峰的起起落落的发展过程,从基于数理逻辑的规则推理到状态空间搜索推理、从专家系统到统计学习、从群智算法到机器学习、从神经网络到支持向量机,不同的人工智能技术曾经各领风骚。

近6年来,采用深度神经网络的深度学习大放异彩、突飞猛进,AlphaGo战胜人类围棋冠军、自动驾驶、机器翻译、语音识别、深度换脸等深度学习的成功应用不断吸引人们的眼球。作为机器学习的一个分支,深度学习使传统的神经网络技术起死回生,在所有的人工智能技术中“一枝独秀”、“独领风骚”、“舍我其谁”地奠定了其作为现代人工智能的霸主地位。

深度学习没有复杂、深奥的理论,在原理上仍然是传统的神经网络,即用一些简单的神经元函数组合成一个复杂的函数并采用简单的梯度下降法根据实际样本数据学习神经网络中的模型参数。其成功主要归因于计算机硬件特别是并行计算性能越来越强的图形处理器GPU和越来越多的大数据。

未来社会将是一个人工智能的社会,人工智能将无处不在,许多工作将被人工智能代替,已经成为社会的共识,世界主要国家也都纷纷制定了人工智能战略,中小学也开始开设人工智能课程。

借助于一些深度学习平台如tensorflow、pytorch、caffe,一个小学生可以轻松使用深度学习库去做人脸识别、语音识别等各种应用,所做的工作就是直接调用这些平台的API定义深度神经网络的模型结构和调试训练参数。这些平台使得深度学习变得非常容易,使深度学习走进了寻常百姓家,人工智能不再神秘。从高校到企业,各行各业的人们都在用深度学习开展各种研究与应用。

和任何技术一样,只有透彻地理解技术背后的原理,才能更好地应用该技术,网上有大量零散的文章讲解深度学习原理,也有一些深度学习课程。而书本仍然是系统学习的重要途径,书面上的深度学习书籍主要分为几类:一类是针对专家或专业研究人员的偏重数学理论的书籍,这类书籍和学术论文一样,读者难以理解,这些书缺少原理的深度剖析和代码实现,读者即使费劲理解了原理可能仍然不知道如何去实现。另一类是工具类书籍,主要介绍如何使用各种深度学习平台,对原理的讲解非常少,使得读者无法理解代码背后的原理,只能依葫芦画瓢。还有一些书只是一些通俗读物,对每个技术都是浅尝辄止,原理和代码往往蜻蜓点水。也有极少的书在介绍原理的同时也有代码实现,并尽可能避免数学公式的推导。

作者认为,平台教程类的书籍具有时效性,书的出版周期往往1年之久,而平台的接口可能已经发生了一些变化甚至较大的改变,对于变化的平台,这类书籍几乎没有价值了。而原理性的书籍应该通俗易懂,尽量避免复杂、深奥的数学,但完全抛弃数学家几千年来发展出来的经典高等数学,而用小学数学描述函数求导对于具有高等数学知识的读者并不是一个最佳的选择。而市面上特别缺少在介绍原理的同时如何从底层而不是用深度学习库实现深度学习的通俗易懂的书籍。

为了照顾对数学感到困难的读者,本书第一章在介绍必须的python编程知识外,还通俗地介绍一些必须的微积分和概率知识。在此基础上,本书由浅入深地从最简单的回归模型过渡到神经网络模型,采用从问题到概念,以易于理解的由浅入深的方式讲解基本概念和原理。既避免长篇大论又避免“惜字如金”,用简单的示例和简明通俗的语言剖析模型与算法的核心原理。在理解原理基础上,进一步用python的numpy库从底层进行代码实现,从而使读者对原理和实现有豁然开朗的启发。通过本书的阅读,读者可以一步步跟着从0构建一个深度学习库,而并不需要任何深度学习平台。最后,作为对照,介绍了深度学习平台Pytorch的使用,使得读者水到渠成地轻松学会使用这种深度学习平台,有助于读者更深刻地理解这些平台的设计思想,从而更好地掌握和使用这些深度学习平台。

本书既适合没有任何深度学习知识的初学者,也适合具有深度学习库使用经验想了解其底层实现原理的从业人员。本书特别适合作为大专院校的深度学习教材。

目录:

内容简介和前言

第1章 编程和数学基础

1.1 Python快速入门

1.1.1 python安装
1.1.2 对象、print()函数、类型转换、注释、变量、input()函数
1.1.3 控制语句
1.1.4 Python常⽤容器类型
1.1.5 函数
1.1.6 类和对象
1.1.7 Matplotlib入⻔

1.2 张量库numpy

1.2.1 什么是张量?
1.2.2 创建ndarray对象
1.2.3 ndarry数组的索引和切片
1.2.4 张量的计算

1.3 微积分

1.3.1 函数
1.3.2 四则和复合运算
1.3.3 极限、导数
1.3.4 导数的四则运算和链式求导法则
1.3.5 计算图、正向计算、反向传播求导
1.3.6 多变量函数的偏导数与梯度
1.3.7 向量值函数的导数与 矩阵
1.3.5 积分

1.4 概率基础

1.4.1 概率
1.4.2 条件概率、联合概率、全概率公式、⻉叶斯公式
1.4.3 随机变量
1.4.4 离散型随机变量的概率分布列
1.4.5 连续性随机变量的概率密度
1.4.6 随机变量的分布函数
1.4.7 期望、⽅差、协⽅差、协变矩阵

第2章 梯度下降法

2.1 函数极值的必要条件

2.2 梯度下降法(gradient descent)

2.3 梯度下降法的参数优化策略

2.3.1 Momentum动量法
2.3.2 Adagrad法
2.3.3 Adadelta法
2.3.4 RMSprop法
2.3.5 Adam法

2.4 梯度验证

2.4.1 比较数值梯度和分析梯度
2.4.2 通⽤的数值梯度

2.5 分离梯度下降算法与参数优化策略

2.5.1 参数优化器
2.5.2 接受参数优化器的梯度下降法

第3章 线性回归、逻辑回归和softmax回归

3.1 线性回归

3.1.1 餐⻋利润问题
3.1.2 机器学习与⼈⼯智能
3.1.3 什么是线性回归?
3.1.4 正规⽅程求解线性回归问题
3.1.5 梯度下降法求解线性回归问题
3.1.6 调试学习率
3.1.7 梯度验证
3.1.8 预测
3.1.9 多特征的线性回归

3.2 数据的规范化

3.2.1 预测⼤坝出⽔量
3.2.2 数据的规范化

3.3 模型的评估

3.3.1 ⽋拟合和过拟合
3.3.2 验证集、测试集
3.3.3 学习曲线
3.3.4 偏差和⽅差(Bias-Variance)

3.4 正则化(Regularization)

3.5 逻辑回归

3.5.1 逻辑回归
3.5.2 逻辑回归的numpy实现
3.5.3 实战:鸢尾花分类的numpy实现

3.6 softmax回归

3.6.1 spiral数据集
3.6.2 softmax函数
3.6.3 softmax回归
3.6.4 多分类交叉熵损失
3.6.5 通过加权和计算交叉熵损失
3.6.6 softmax回归的梯度计算
3.6.7 softmax回归的梯度下降法的实现
3.6.8 spiral数据集的softmax回归

3.7 批梯度下降法和随机梯度下降法

3.7.1 MNIST ⼿写数字集
3.7.2 ⽤部分训练样本训练逻辑回归
3.7.3 批梯度下降法及实现
3.7.4 随机梯度下降法

4.1 神经⽹络(Neural Network)

4.1.1 感知机和神经元
4.1.2 激活函数
4.1.3 神经⽹络和深度学习
4.1.4 多个样本的正向计算
4.1.5 输出
4.1.6 损失函数
4.1.7 基于数值梯度的神经⽹络训练
4.1.8 深度学习

4.2 反向求导

4.2.1正向计算和反向求导
4.2.2 计算图
4.2.3 损失函数关于输出的梯度
4.2.4 2层神经⽹络的反向传播求导
4.2.5 2层神经⽹络的python实现
4.2.6 任意层神经⽹络的反向传播求导

4.3 实现⼀个简单的深度学习框架

4.3.1 神经⽹络的训练过程
4.3.2 ⽹络层的代码实现
4.3.3 ⽹络层的梯度检验
4.3.4 神经⽹络类
4.3.5 神经⽹络的梯度检验
4.3.6 基于深度学习框架的MNIST数据⼿写数字识别
4.3.7 改进的通⽤神经⽹络框架:分离加权和与激活函数
4.3.8 独立的参数优化器
4.3.9 fashion-mnist的分类训练
4.3.10 读写模型参数

第5章 改进神经⽹络性能的基本技巧

5.1 数据处理

5.1.1 数据增强
5.1.2 规范化
5.1.3 特征⼯程

5.2 参数调试

5.2.1 权重初始化
5.2.2 优化参数

5.3 批规范化

5.3.1 什么是批规范化?
5.3.2 批规范化的反向求导
5.3.3 批规范化的代码实现

5.4 正则化Regularization

5.4.1 权重正则化
5.4.2 Dropout
5.4.3 早停法(Early stopping)

第6章 卷积神经⽹络CNN

6.1 卷积

6.1.1 什么是卷积?
6.1.2 ⼀维信号的卷积
6.1.3 ⼆维卷积
6.1.4 多输入通道和多输出通道
6.1.5 池化

6.2 卷积神经⽹络

6.2.1 全连接神经元和卷积神经元
6.2.2 卷积层和卷积神经⽹络
6.2.3 卷积层和池化层的反向求导及代码实现
6.2.4 卷积神经⽹络的实现

6.3 卷积的矩阵乘法

6.3.1 1D样本卷积的矩阵乘法
6.3.2 2D样本卷积的矩阵乘法
6.3.3 1D卷积反向求导的矩阵乘法
6.3.4 2D卷积反向求导的矩阵乘法

6.4 基于坐标索引的快速卷积

6.5 典型的卷积神经⽹络结构

6.5.1 LeNet-5
6.5.2 AlexNet
6.5.3 VGG
6.5.4 深度神经⽹络的梯度爆炸和消失问题
6.5.5 残差⽹络(Residual Networks (ResNets))
6.5.6 ⾕歌 Inception ⽹络
6.5.7 Network in Network (NiN)

第7章 循环神经网络RNN

7.1 序列问题和模型

7.1.1 股票价格预测问题
7.1.2 概率序列模型、语言模型
7.1.3 自回归模型
7.1.4 生成自回归数据
7.1.5 时间窗方法
7.1.6 时间窗采样
7.1.6 时间窗采样
7.1.8 长期预测和短期预测
7.1.9 股票价格预测
7.1.10 k-gram 语言模型

7.2 循环神经网络

7.2.1 无记忆功能的非循环神经网络
7.2.2 具有记忆功能的循环神经网络
7.3 穿过时间的反向传播(Backpropagation through

time)

7.4 单层循环神经网络的实现

7.4.1 初始化模型参数
7.4.2 正向计算
7.4.3 损失函数
7.4.4 反向求导
7.4.5 梯度验证
7.4.6 梯度下降训练
7.4.7 序列数据的采样
7.4.8 序列数据的RNN训练和预测

7.5 RNN语言模型和文本生成

7.5.1 字符表
7.5.2 字符序列样本的采样
7.5.3 RNN模型的训练和预测

7.6 RNN网络的梯度爆炸和梯度消失

7.7 长短期记忆网络(LSTM)

7.7.1 LSTM的神经元:元胞(cell)
7.7.2 LSTM的反向求导
7.7.3 LSTM的代码实现
7.7.4 LSTM的变种

7.8 门控循环单元(GRU)

7.8.1 GRU的工作原理
7.8.2 GRU的代码实现

7.9 循环神经网络的类表示与实现

7.9.1 用类实现循环神经网络
7.9.2 循环神经网络单元的类实现

7.10 多层、双向循环神经网络

7.10.1 多层循环神经网络
7.10.2 多层循环神经网络的训练和预测
7.10.3 双向循环神经网络

7.10.3 双向循环神经网络

7.11.1 Seq2Seq模型的实现
7.11.2 字符级机器翻译的Seq2Seq
7.11.3 基于Word2Vec的Seq2Seq机器翻译
7.11.4 基于词嵌入层的Seq2Seq模型
7.11.5 注意力机制

第8章 ⽣成模型

8.1 ⽣成模型

8.2 ⾃动编码器

8.2.1 ⾃动编码器
8.2.2 稀疏编码器
8.2.3 ⾃动编码器的实现

8.3 变分⾃动编码器

8.3.1 什么是变分⾃动编码器?
8.3.2 损失函数
8.3.3 参数重采样
8.3.4 反向求导
8.3.4 变分⾃动编码器的实现

8.4 ⽣成对抗⽹络

8.4.1 GAN原理
8.4.2 GAN 训练过程的代码实现

8.5 GAN建模实例

8.5.1 ⼀组实数的GAN建模
8.5.2 ⼆维坐标点的GAN建模
8.5.3 MNIST数据集的GAN建模
8.5.4 GAN训练技巧

8.6 GAN损失函数及其概率解释

8.6.1 GAN的损失函数的全局最优解
8.6.2 Kullback–Leibler散度和Jensen–Shannon散
8.6.3 GAN的最⼤似然解释

8.7 改进的损失函数:Wasserstein GAN(WGAN)

8.7.1 Wasserstein GAN的原理
8.7.2 WGAN的代码实现

8.8 深度卷积对抗⽹络 DCGAN

8.8.1 1D向量的转置卷积
8.8.2 2D转置卷积
8.8.3 卷积对抗⽹络DCGAN的实现
Written on March 21, 2021