Deep Learning

本文记录学习深度学习过程,记录一些重点和难理解的方面吧,非总结向,可能不是很全面。

参考书目《Deep Learning》–Ian Goodfellow

[TOC]

第1章 引言

1.1 本书面向的读者

1.2 深度学习的历史趋势

第1部分 应用数学与机器学习基础

第2章 线性代数

2.1 标量、向量、矩阵和张量

这一部分第一次接触,看起来很像是之前数学、物理中学过的概念,但是琢磨一下还是发现概念很绕的,总是似懂非懂,脑子转不过弯,网上看了很多介绍,千篇一律,都只是讲概念。

Youtube上有一段Dan Fleisch讲解张量的一段视频,是人们非常推荐的。

What’s a Tensor?

可能因为我脑子笨吧,看了这么生动的讲解还是没有了解。所以又找了一些资料,看看是否有更通俗的理解。

张量就是一个变化量。

张量有零阶、一阶、二阶、三阶、四阶等等。

零阶张量是标量(数值)

一阶张量是向量(数值和方向的组合)

二阶张量是矩阵(向量的组合)

三阶张量是数据立体(矩阵的组合)

四阶张量(数据立体的组合)

等等。

1、标量就是一个数值,可以看成是一个数值上的变化量。

2、向量是点到点的变化量,而点可以是一维空间上的点、二维空间上的点、三维空间上的点,等等。

一维空间上的点的变化,好像点(x)在线上的移动,也即是左右的线性变化,变化量可以表示为[x1]。

二维空间上的点的变化,好像点(x,y)在面上的移动,也即是前后左右的线性变化,变化量可以表示为[x1, y1]。

三维空间上的点的变化,好像点(x,y,z)在体上的移动,也即是前后上下左右的线性变化,变化量可以表示为[x1, y1, z1]。

N维空间上的点的变化,好像点(x,y,z,…..n)在体上的移动,也即是2n个方向的线性变化,变化量可以表示为[x1, y1, z1,……n1]。

3、矩阵是图形到图形的变化量,而图形可以是一维的线、二维的面、三维的体,等等。

3.1、一维的线的变化,我们知道两点可以表示一线段,则需要用两个向量组成的矩阵对两点进行变化,就能达到对线段的变化。

img

3.2、二维的面的变化,我们知道三点可以表示一个三角形,四点可以表示一个四边形,五点可以表示一个五边形,等等。就拿三角形来说,需要用三个向量组成的矩阵对三点进行变化,就能达到对三角形的变化。

img

3.3、三维的体的变化,我们知道4点可以表示一个三角堆,5点可以表示四棱锥、6点可以表示一个三棱柱,等等。就拿三角堆来说,需要用四个向量组成的矩阵来对四个顶点进行变化,就能达到对三角堆的变化。

img

4、三阶张量可以表示图像的变化量,图像与图形的不同是图像的点除了有坐标,还具有颜色特性,如RGB、RGBA、YCbcr等表示的颜色。拿RGB的图像来说,它的变化量包括坐标和色值变化。图像坐标的变化相当于图形的变化,即是一个矩阵的变化。色值变化也就是RGB在颜色空间中的一个点变化,也是一个矩阵的变化,图像变化有两个矩阵变化,三阶张量是矩阵的组合,则可以用三阶张量来表示图像的变化量,如tensor[3,5,5]表示3颜色通道的5*5大小图形的变化量。

5、四阶张量在TensorFlow的神经卷积网络中,经常用到。下面举个例子。

5.1、输入张量格式:[batch, in_height, in_width, in_channels]

5.2、卷积核格式:[filter_height, filter_width, in_channels, out_channels]

5.3、我们来对输入图片进行卷积得到特征图片。

一张5通道的5*5的输入图片:input = [1, 5, 5, 5];

5输入通道、7输出通道的3*3大小的卷积核:filter = [3, 3, 5, 7];

strides=[1,1,1,1]表示各个方向步长为1;

padding=“SAME”表示卷积核遍历到输入图片的每个像素,得到的特征图片与输入图片是一样大小。

tf.shape(tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding=“SAME”));

卷积结果是:[1, 5, 5, 7]

5.4、用图形来表示上面的卷积过程。

img

简化版:

标量,向量,矩阵与张量

1、标量
一个标量就是一个单独的数,一般用小写的的变量名称表示。

2、向量
一个向量就是一列数,这些数是有序排列的。用过次序中的索引,我们可以确定每个单独的数。通常会赋予向量粗体的小写名称。当我们需要明确表示向量中的元素时,我们会将元素排列成一个方括号包围的纵柱:

我们可以把向量看作空间中的点,每个元素是不同的坐标轴上的坐标。

$$
x=[x_1\ x_2\ \cdots\ x_n]
$$
3、矩阵
矩阵是二维数组,其中的每一个元素被两个索引而非一个所确定。我们通常会赋予矩阵粗体的大写变量名称,比如A。 如果一个实数矩阵高度为m,宽度为n,那么我们说 。
$$
A=
\begin{bmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \
a_{21} & a_{22} & \cdots & a_{2n} \
a_{31} & a_{32} & \cdots & a_{3n} \
\cdots & \cdots & & \cdots \
a_{m1} & a_{n2} & \cdots & a_{mn} \
\end{bmatrix}
$$
矩阵这东西在机器学习中就不要太重要了!实际上,如果我们现在有N个用户的数据,每条数据含有M个特征,那其实它对应的就是一个NM的矩阵呀;再比如,一张图由1616的像素点组成,那这就是一个16*16的矩阵了。现在才发现,我们大一学的矩阵原理原来这么的有用!要是当时老师讲课的时候先普及一下,也不至于很多同学学矩阵的时候觉得莫名其妙了。

img

4、张量
几何代数中定义的张量是基于向量和矩阵的推广,通俗一点理解的话,我们可以将标量视为零阶张量,矢量视为一阶张量,那么矩阵就是二阶张量。

例如,可以将任意一张彩色图片表示成一个三阶张量,三个维度分别是图片的高度、宽度和色彩数据。将这张图用张量表示出来,就是最下方的那张表格:

其中表的横轴表示图片的宽度值,这里只截取0319;表的纵轴表示图片的高度值,这里只截取04;表格中每个方格代表一个像素点,比如第一行第一列的表格数据为[1.0,1.0,1.0],代表的就是RGB三原色在图片的这个位置的取值情况(即R=1.0,G=1.0,B=1.0)。

当然我们还可以将这一定义继续扩展,即:我们可以用四阶张量表示一个包含多张图片的数据集,这四个维度分别是:图片在数据集中的编号,图片高度、宽度,以及色彩数据。

还有一种描述

  • (2,3) 表示两个一维数组,每个一维数组长度为3
  • (2,3,4) 表示两个二维数组,每个二维数组有3个一维数组,每个一维数组长度为4
  • (2,3,4,5) 表示两个三维数组,每个三维数组有3个二维数组,每个二维数组有4个一维数组,一维数组长度为5

可能更容易理解。

2.2 矩阵和向量相乘

2.3 单位矩阵和逆矩阵

2.4 线性相关和生成子空间

2.5 范数

2.6 特殊类型的矩阵和向量

2.7 特征分解

2.8 奇异值分解

2.9 Moore-Penrose 伪逆

2.10 迹运算

2.11 行列式

2.12 实例:主成分分析

如何通俗易懂地讲解什么是 PCA 主成分分析?

第3章 概率与信息论

3.1 为什么要使用概率

3.2 随机变量

3.3 概率分布

3.4 边缘概率

3.5 条件概率

3.6 条件概率的链式法则

3.7 独立性和条件独立性

3.8 期望、方差和协方差

3.9 常用概率分布

3.10 常用函数的有用性质

3.11 贝叶斯规则

3.12 连续型变量的技术细节

3.13 信息论

3.14 结构化概率模型

第4章 数值计算

4.1 上溢和下溢

4.2 病态条件

4.3 基于梯度的优化方法

4.4 约束优化

4.5 实例:线性最小二乘

第5章 机器学习基础

5.1 学习算法

5.2 容量、过拟合和欠拟合

5.3 超参数和验证集

5.4 估计、偏差和方差

5.5 最大似然估计

5.6 贝叶斯统计

5.7 监督学习算法

5.8 无监督学习算法

5.9 随机梯度下降

5.10 构建机器学习算法

5.11 促使深度学习发展的挑战

第2部分 深度网络:现代实践

第6章 深度前馈网络

6.1 实例:学习XOR