|
|
@ -1,2 +1,4 @@
|
||||||
.ipynb_checkpoints
|
.ipynb_checkpoints
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
.gitignore
|
||||||
|
*.ipynb
|
||||||
|
|
|
||||||
17
README.md
|
|
@ -9,9 +9,10 @@
|
||||||
|
|
||||||
|
|
||||||
# 3. 加入以及文档规范
|
# 3. 加入以及文档规范
|
||||||
寻求有愿意继续完善的朋友、编辑、写手;如有意合作,完善出书(成为共同作者)。
|
1、寻求有愿意继续完善的朋友、编辑、写手;如有意合作,完善出书(成为共同作者)。
|
||||||
所有提交内容的贡献者,将会在文中体现贡献者个人信息(例: 大佬-西湖大学)
|
2、所有提交内容的贡献者,将会在文中体现贡献者个人信息(例: 大佬-西湖大学)
|
||||||
为了让内容更充实完善,集思广益,欢迎Fork该项目并参与编写。请在修改MD文件的同时(或直接留言)备注自己的姓名-单位(大佬-斯坦福大学),一经采纳,会在原文中显示贡献者的信息,如有收益,会进一步分红,谢谢!
|
3、为了让内容更充实完善,集思广益,欢迎Fork该项目并参与编写。请在修改MD文件的同时(或直接留言)备注自己的姓名-单位(大佬-斯坦福大学),一经采纳,会在原文中显示贡献者的信息,谢谢!
|
||||||
|
4、推荐使用typora-Markdown阅读器:https://typora.io/
|
||||||
|
|
||||||
例子:
|
例子:
|
||||||
|
|
||||||
|
|
@ -57,7 +58,7 @@
|
||||||
|<font size="1">第十六章 自然语言处理NLP</font>|<font size="1">电子科技大学博士-盛泳潘;深圳乌灵图明科技有限公司CTO-何建宏;DaoCloud研发工程师-张善干;澳洲monash大学Research Scientist/Telstra(澳洲电信)Data Scientist-钟申俊博士;华南理工大学&UCI博士-黄振华</font>||
|
|<font size="1">第十六章 自然语言处理NLP</font>|<font size="1">电子科技大学博士-盛泳潘;深圳乌灵图明科技有限公司CTO-何建宏;DaoCloud研发工程师-张善干;澳洲monash大学Research Scientist/Telstra(澳洲电信)Data Scientist-钟申俊博士;华南理工大学&UCI博士-黄振华</font>||
|
||||||
|<font size="1">第十七章 移动端框架部署(新增) </font>|<font size="1">川大硕士-顺丰科技-谈继勇;贵州大学硕士-三星-张达峰</font>|<font size="1">可加 </font>|
|
|<font size="1">第十七章 移动端框架部署(新增) </font>|<font size="1">川大硕士-顺丰科技-谈继勇;贵州大学硕士-三星-张达峰</font>|<font size="1">可加 </font>|
|
||||||
|<font size="1">第十八章 后端分布式框架部署(新增) </font>|<font size="1">广工学士-魅族科技-梁志成</font>|<font size="1">可加 </font>|
|
|<font size="1">第十八章 后端分布式框架部署(新增) </font>|<font size="1">广工学士-魅族科技-梁志成</font>|<font size="1">可加 </font>|
|
||||||
|<font size="1">MD编辑</font>|<font size="2">汪明阔;南京大学硕士研究生-汪然;乐刻-张梦欣</font>|<font size="1">可加</font>|
|
|<font size="1">MD编辑</font>|<font size="1">汪明阔;南京大学硕士研究生-汪然;乐刻-张梦欣;梅红伟-长虹-云服务开发</font>|<font size="1">可加</font>|
|
||||||
# 5. 更多
|
# 5. 更多
|
||||||
|
|
||||||
1. 寻求有愿意继续完善的朋友、编辑、写手; 如有意合作,完善出书(成为共同作者)。
|
1. 寻求有愿意继续完善的朋友、编辑、写手; 如有意合作,完善出书(成为共同作者)。
|
||||||
|
|
@ -74,9 +75,11 @@
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
3. 注意, 现出现不法分子冒充发起人,请广大伙伴儿知悉!
|
3. Markdown阅读器推荐:https://typora.io/ 免费且对于数学公式显示支持的比较好。
|
||||||
|
|
||||||
4. 接下来,将提供MD版本,大家一起编辑完善,敬请期待!希望踊跃提建议,补充修改内容!
|
4. 注意, 现出现不法分子冒充发起人,请广大伙伴儿知悉!
|
||||||
|
|
||||||
|
5. 接下来,将提供MD版本,大家一起编辑完善,敬请期待!希望踊跃提建议,补充修改内容!
|
||||||
|
|
||||||
|
|
||||||
# 6. 目录
|
# 6. 目录
|
||||||
|
|
@ -574,6 +577,6 @@
|
||||||
|
|
||||||
**参考文献 366**
|
**参考文献 366**
|
||||||
|
|
||||||
hey you are looked like a cool developer.
|
hey you look like a cool developer.
|
||||||
Translate it in english.
|
Translate it in english.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,4 +10,6 @@
|
||||||
**贡献者(排名不分先后):**
|
**贡献者(排名不分先后):**
|
||||||
内容贡献者可自加信息
|
内容贡献者可自加信息
|
||||||
|
|
||||||
|
刘彦超-东南大学
|
||||||
|
|
||||||
###########################################################
|
###########################################################
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
> Editor: 谈继勇 &乔成磊-同济大学 & 哈工大博士生-袁笛
|
> Editor: 谈继勇 &乔成磊-同济大学 & 哈工大博士生-袁笛
|
||||||
|
|
||||||
> Contact: scutjy2015@163.com qchl0318@163.com & dyuanhit@gmail.com
|
> Contact: scutjy2015@163.com & qchl0318@163.com & dyuanhit@gmail.com
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
矩阵是具有相同特征和纬度的对象的集合,表现为一张二维数据表。其意义是一个对象表示为矩阵中的一行,一个特征表示为矩阵中的一列,每个特征都有数值型的取值。通常会赋予矩阵粗体的大写变量名称,比如$A$。
|
矩阵是具有相同特征和纬度的对象的集合,表现为一张二维数据表。其意义是一个对象表示为矩阵中的一行,一个特征表示为矩阵中的一列,每个特征都有数值型的取值。通常会赋予矩阵粗体的大写变量名称,比如$A$。
|
||||||
|
|
||||||
**张量(tensor)**
|
**张量(tensor)**
|
||||||
在某些情况下,我们会讨论坐标超过两维的数组。一般地,一个数组中的元素分布在若干维坐标的规则网格中,我们将其称之为张量。使用**$A$**来表示张量“A”。张量**$A$**中坐标为$(i,j,k)$的元素记作$A_{(i,j,k)}$。
|
在某些情况下,我们会讨论坐标超过两维的数组。一般地,一个数组中的元素分布在若干维坐标的规则网格中,我们将其称之为张量。使用 $A$ 来表示张量“A”。张量$A$中坐标为$(i,j,k)$的元素记作$A_{(i,j,k)}$。
|
||||||
|
|
||||||
**四者之间关系**
|
**四者之间关系**
|
||||||
|
|
||||||
|
|
@ -43,33 +43,85 @@
|
||||||
|
|
||||||
## 1.4 向量和矩阵的范数归纳
|
## 1.4 向量和矩阵的范数归纳
|
||||||
**向量的范数**
|
**向量的范数**
|
||||||
定义一个向量为:$\vec{a}=[-5, 6, 8, -10]$。其不同范数求解如下:
|
定义一个向量为:$\vec{a}=[-5, 6, 8, -10]$。任意一组向量设为$\vec{x}=(x_1,x_2,...,x_N)$。其不同范数求解如下:
|
||||||
|
|
||||||
- 向量的1范数:向量的各个元素的绝对值之和,上述向量$\vec{a}$的1范数结果就是:29。
|
- 向量的1范数:向量的各个元素的绝对值之和,上述向量$\vec{a}$的1范数结果就是:29。
|
||||||
|
|
||||||
|
$$
|
||||||
|
\Vert\vec{x}\Vert_1=\sum_{i=1}^N\vert{x_i}\vert
|
||||||
|
$$
|
||||||
|
|
||||||
- 向量的2范数:向量的每个元素的平方和再开平方根,上述$\vec{a}$的2范数结果就是:15。
|
- 向量的2范数:向量的每个元素的平方和再开平方根,上述$\vec{a}$的2范数结果就是:15。
|
||||||
|
|
||||||
|
$$
|
||||||
|
\Vert\vec{x}\Vert_2=\sqrt{\sum_{i=1}^N{\vert{x_i}\vert}^2}
|
||||||
|
$$
|
||||||
|
|
||||||
- 向量的负无穷范数:向量的所有元素的绝对值中最小的:上述向量$\vec{a}$的负无穷范数结果就是:5。
|
- 向量的负无穷范数:向量的所有元素的绝对值中最小的:上述向量$\vec{a}$的负无穷范数结果就是:5。
|
||||||
|
|
||||||
|
$$
|
||||||
|
\Vert\vec{x}\Vert_{-\infty}=\min{|{x_i}|}
|
||||||
|
$$
|
||||||
|
|
||||||
- 向量的正无穷范数:向量的所有元素的绝对值中最大的:上述向量$\vec{a}$的负无穷范数结果就是:10。
|
- 向量的正无穷范数:向量的所有元素的绝对值中最大的:上述向量$\vec{a}$的负无穷范数结果就是:10。
|
||||||
- 向量的L-P范数:$L_p=|\vec{x}|_p=\sqrt[p]{\sum_{i=1}^{n}x_i^p},\vec{x}=( x_1,x_2,...,x_n )$
|
|
||||||
|
$$
|
||||||
|
\Vert\vec{x}\Vert_{+\infty}=\max{|{x_i}|}
|
||||||
|
$$
|
||||||
|
|
||||||
|
- 向量的p范数:
|
||||||
|
|
||||||
|
$$
|
||||||
|
L_p=\Vert\vec{x}\Vert_p=\sqrt[p]{\sum_{i=1}^{N}|{x_i}|^p}
|
||||||
|
$$
|
||||||
|
|
||||||
**矩阵的范数**
|
**矩阵的范数**
|
||||||
|
|
||||||
定义一个矩阵$A=[-1, 2, -3; 4, -6, 6]$。
|
定义一个矩阵$A=[-1, 2, -3; 4, -6, 6]$。 任意矩阵定义为:$A_{m\times n}$,其元素为 $a_{ij}$。
|
||||||
矩阵的范数定义为
|
|
||||||
|
矩阵的范数定义为
|
||||||
|
|
||||||
$$
|
$$
|
||||||
\|A\|_p :=\sup_{x\neq 0}\frac{\|Ax\|_p}{\|x\|_p}.
|
\Vert{A}\Vert_p :=\sup_{x\neq 0}\frac{\Vert{Ax}\Vert_p}{\Vert{x}\Vert_p}
|
||||||
$$
|
$$
|
||||||
|
|
||||||
当向量取不同范数时, 相应得到了不同的矩阵范数。
|
当向量取不同范数时, 相应得到了不同的矩阵范数。
|
||||||
|
|
||||||
- **矩阵的1范数**:矩阵的每一列上的元素绝对值先求和,再从中取个最大的,(列和最大),上述矩阵$A$的1范数先得到$[5,8,9]$,再取最大的最终结果就是:9。
|
- **矩阵的1范数(列范数)**:矩阵的每一列上的元素绝对值先求和,再从中取个最大的,(列和最大),上述矩阵$A$的1范数先得到$[5,8,9]$,再取最大的最终结果就是:9。
|
||||||
|
|
||||||
|
$$
|
||||||
|
\Vert A\Vert_1=\max_{1\le j\le}\sum_{i=1}^m|{a_{ij}}|
|
||||||
|
$$
|
||||||
|
|
||||||
- **矩阵的2范数**:矩阵$A^TA$的最大特征值开平方根,上述矩阵$A$的2范数得到的最终结果是:10.0623。
|
- **矩阵的2范数**:矩阵$A^TA$的最大特征值开平方根,上述矩阵$A$的2范数得到的最终结果是:10.0623。
|
||||||
- **矩阵的无穷范数**:矩阵的每一行上的元素绝对值先求和,再从中取个最大的,(行和最大),上述矩阵$A$的1范数先得到$[6;16]$,再取最大的最终结果就是:16。
|
|
||||||
|
$$
|
||||||
|
\Vert A\Vert_2=\sqrt{\lambda_{max}(A^T A)}
|
||||||
|
$$
|
||||||
|
|
||||||
|
其中, $\lambda_{max}(A^T A)$ 为 $A^T A$ 的特征值绝对值的最大值。
|
||||||
|
- **矩阵的无穷范数(行范数)**:矩阵的每一行上的元素绝对值先求和,再从中取个最大的,(行和最大),上述矩阵$A$的1范数先得到$[6;16]$,再取最大的最终结果就是:16。
|
||||||
|
|
||||||
|
$$
|
||||||
|
\Vert A\Vert_{\infty}=\max_{1\le i \le n}\sum_{j=1}^n |{a_{ij}}|
|
||||||
|
$$
|
||||||
|
|
||||||
- **矩阵的核范数**:矩阵的奇异值(将矩阵svd分解)之和,这个范数可以用来低秩表示(因为最小化核范数,相当于最小化矩阵的秩——低秩),上述矩阵A最终结果就是:10.9287。
|
- **矩阵的核范数**:矩阵的奇异值(将矩阵svd分解)之和,这个范数可以用来低秩表示(因为最小化核范数,相当于最小化矩阵的秩——低秩),上述矩阵A最终结果就是:10.9287。
|
||||||
|
|
||||||
- **矩阵的L0范数**:矩阵的非0元素的个数,通常用它来表示稀疏,L0范数越小0元素越多,也就越稀疏,上述矩阵$A$最终结果就是:6。
|
- **矩阵的L0范数**:矩阵的非0元素的个数,通常用它来表示稀疏,L0范数越小0元素越多,也就越稀疏,上述矩阵$A$最终结果就是:6。
|
||||||
- **矩阵的L1范数**:矩阵中的每个元素绝对值之和,它是L0范数的最优凸近似,因此它也可以表示稀疏,上述矩阵$A$最终结果就是:22。
|
- **矩阵的L1范数**:矩阵中的每个元素绝对值之和,它是L0范数的最优凸近似,因此它也可以表示稀疏,上述矩阵$A$最终结果就是:22。
|
||||||
- **矩阵的F范数**:矩阵的各个元素平方之和再开平方根,它通常也叫做矩阵的L2范数,它的有点在它是一个凸函数,可以求导求解,易于计算,上述矩阵A最终结果就是:10.0995。
|
- **矩阵的F范数**:矩阵的各个元素平方之和再开平方根,它通常也叫做矩阵的L2范数,它的有点在它是一个凸函数,可以求导求解,易于计算,上述矩阵A最终结果就是:10.0995。
|
||||||
|
|
||||||
|
$$
|
||||||
|
\Vert A\Vert_F=\sqrt{(\sum_{i=1}^m\sum_{j=1}^n{| a_{ij}|}^2)}
|
||||||
|
$$
|
||||||
|
|
||||||
- **矩阵的L21范数**:矩阵先以每一列为单位,求每一列的F范数(也可认为是向量的2范数),然后再将得到的结果求L1范数(也可认为是向量的1范数),很容易看出它是介于L1和L2之间的一种范数,上述矩阵$A$最终结果就是:17.1559。
|
- **矩阵的L21范数**:矩阵先以每一列为单位,求每一列的F范数(也可认为是向量的2范数),然后再将得到的结果求L1范数(也可认为是向量的1范数),很容易看出它是介于L1和L2之间的一种范数,上述矩阵$A$最终结果就是:17.1559。
|
||||||
|
- **矩阵的 p范数**
|
||||||
|
|
||||||
|
$$
|
||||||
|
\Vert A\Vert_p=\sqrt[p]{(\sum_{i=1}^m\sum_{j=1}^n{| a_{ij}|}^p)}
|
||||||
|
$$
|
||||||
|
|
||||||
## 1.5 如何判断一个矩阵为正定?
|
## 1.5 如何判断一个矩阵为正定?
|
||||||
- 顺序主子式全大于0;
|
- 顺序主子式全大于0;
|
||||||
|
|
@ -84,37 +136,50 @@ $$
|
||||||
**导数定义**:
|
**导数定义**:
|
||||||
|
|
||||||
导数代表了在自变量变化趋于无穷小的时候,函数值的变化与自变量的变化的比值。几何意义是这个点的切线。物理意义是该时刻的(瞬时)变化率。
|
导数代表了在自变量变化趋于无穷小的时候,函数值的变化与自变量的变化的比值。几何意义是这个点的切线。物理意义是该时刻的(瞬时)变化率。
|
||||||
*注意*:在一元函数中,只有一个自变量变动,也就是说只存在一个方向的变化率,这也就是为什么一元函数没有偏导数的原因。
|
|
||||||
在物理学中有平均速度和瞬时速度之说。平均速度有
|
|
||||||
|
*注意*:在一元函数中,只有一个自变量变动,也就是说只存在一个方向的变化率,这也就是为什么一元函数没有偏导数的原因。在物理学中有平均速度和瞬时速度之说。平均速度有
|
||||||
|
|
||||||
$$
|
$$
|
||||||
v=\frac{s}{t}
|
v=\frac{s}{t}
|
||||||
$$
|
$$
|
||||||
|
|
||||||
其中$v$表示平均速度,$s$表示路程,$t$表示时间。这个公式可以改写为
|
其中$v$表示平均速度,$s$表示路程,$t$表示时间。这个公式可以改写为
|
||||||
|
|
||||||
$$
|
$$
|
||||||
\bar{v}=\frac{\Delta s}{\Delta t}=\frac{s(t_0+\Delta t)-s(t_0)}{\Delta t}
|
\bar{v}=\frac{\Delta s}{\Delta t}=\frac{s(t_0+\Delta t)-s(t_0)}{\Delta t}
|
||||||
$$
|
$$
|
||||||
|
|
||||||
其中$\Delta s$表示两点之间的距离,而$\Delta t$表示走过这段距离需要花费的时间。当$\Delta t$趋向于0($\Delta t \to 0$)时,也就是时间变得很短时,平均速度也就变成了在$t_0$时刻的瞬时速度,表示成如下形式:
|
其中$\Delta s$表示两点之间的距离,而$\Delta t$表示走过这段距离需要花费的时间。当$\Delta t$趋向于0($\Delta t \to 0$)时,也就是时间变得很短时,平均速度也就变成了在$t_0$时刻的瞬时速度,表示成如下形式:
|
||||||
|
|
||||||
$$
|
$$
|
||||||
v(t_0)=\lim_{\Delta t \to 0}{\bar{v}}=\lim_{\Delta t \to 0}{\frac{\Delta s}{\Delta t}}=\lim_{\Delta t \to 0}{\frac{s(t_0+\Delta t)-s(t_0)}{\Delta t}}
|
v(t_0)=\lim_{\Delta t \to 0}{\bar{v}}=\lim_{\Delta t \to 0}{\frac{\Delta s}{\Delta t}}=\lim_{\Delta t \to 0}{\frac{s(t_0+\Delta t)-s(t_0)}{\Delta t}}
|
||||||
$$
|
$$
|
||||||
|
|
||||||
实际上,上式表示的是路程$s$关于时间$t$的函数在$t=t_0$处的导数。一般的,这样定义导数:如果平均变化率的极限存在,即有
|
实际上,上式表示的是路程$s$关于时间$t$的函数在$t=t_0$处的导数。一般的,这样定义导数:如果平均变化率的极限存在,即有
|
||||||
|
|
||||||
$$
|
$$
|
||||||
\lim_{\Delta x \to 0}{\frac{\Delta y}{\Delta x}}=\lim_{\Delta x \to 0}{\frac{f(x_0+\Delta x)-f(x_0)}{\Delta x}}
|
\lim_{\Delta x \to 0}{\frac{\Delta y}{\Delta x}}=\lim_{\Delta x \to 0}{\frac{f(x_0+\Delta x)-f(x_0)}{\Delta x}}
|
||||||
$$
|
$$
|
||||||
则称此极限为函数$y=f(x)$在点$x_0$处的导数。记作$f'(x_0)$或$y'|_{x=x_0}$或$\frac{dy}{dx}|_{x=x_0}$或$\frac{df(x)}{dx}|_{x=x_0}$。
|
|
||||||
|
则称此极限为函数 $y=f(x)$ 在点 $x_0$ 处的导数。记作 $f'(x_0)$ 或 $y'\vert_{x=x_0}$ 或 $\frac{dy}{dx}\vert_{x=x_0}$ 或 $\frac{df(x)}{dx}\vert_{x=x_0}$。
|
||||||
|
|
||||||
通俗地说,导数就是曲线在某一点切线的斜率。
|
通俗地说,导数就是曲线在某一点切线的斜率。
|
||||||
|
|
||||||
**偏导数**:
|
**偏导数**:
|
||||||
|
|
||||||
既然谈到偏导数,那就至少涉及到两个自变量。以两个自变量为例,z=f(x,y),从导数到偏导数,也就是从曲线来到了曲面。曲线上的一点,其切线只有一条。但是曲面上的一点,切线有无数条。而偏导数就是指多元函数沿着坐标轴的变化率。
|
既然谈到偏导数,那就至少涉及到两个自变量。以两个自变量为例,z=f(x,y),从导数到偏导数,也就是从曲线来到了曲面。曲线上的一点,其切线只有一条。但是曲面上的一点,切线有无数条。而偏导数就是指多元函数沿着坐标轴的变化率。
|
||||||
注意:直观地说,偏导数也就是函数在某一点上沿坐标轴正方向的的变化率。
|
|
||||||
|
|
||||||
|
*注意*:直观地说,偏导数也就是函数在某一点上沿坐标轴正方向的的变化率。
|
||||||
|
|
||||||
设函数$z=f(x,y)$在点$(x_0,y_0)$的领域内有定义,当$y=y_0$时,$z$可以看作关于$x$的一元函数$f(x,y_0)$,若该一元函数在$x=x_0$处可导,即有
|
设函数$z=f(x,y)$在点$(x_0,y_0)$的领域内有定义,当$y=y_0$时,$z$可以看作关于$x$的一元函数$f(x,y_0)$,若该一元函数在$x=x_0$处可导,即有
|
||||||
|
|
||||||
$$
|
$$
|
||||||
\lim_{\Delta x \to 0}{\frac{f(x_0+\Delta x,y_0)-f(x_0,y_0)}{\Delta x}}=A
|
\lim_{\Delta x \to 0}{\frac{f(x_0+\Delta x,y_0)-f(x_0,y_0)}{\Delta x}}=A
|
||||||
$$
|
$$
|
||||||
函数的极限$A$存在。那么称$A$为函数$z=f(x,y)$在点$(x_0,y_0)$处关于自变量$x$的偏导数,记作$f_x(x_0,y_0)$或$\frac{\eth z}{\eth x}|_{y=y_0}^{x=x_0}$或$\frac{\eth f}{\eth x}|_{y=y_0}^{x=x_0}$或$z_x|_{y=y_0}^{x=x_0}$。
|
|
||||||
|
函数的极限$A$存在。那么称$A$为函数$z=f(x,y)$在点$(x_0,y_0)$处关于自变量$x$的偏导数,记作$f_x(x_0,y_0)$或$\frac{\partial z}{\partial x}\vert_{y=y_0}^{x=x_0}$或$\frac{\partial f}{\partial x}\vert_{y=y_0}^{x=x_0}$或$z_x\vert_{y=y_0}^{x=x_0}$。
|
||||||
|
|
||||||
偏导数在求解时可以将另外一个变量看做常数,利用普通的求导方式求解,比如$z=3x^2+xy$关于$x$的偏导数就为$z_x=6x+y$,这个时候$y$相当于$x$的系数。
|
偏导数在求解时可以将另外一个变量看做常数,利用普通的求导方式求解,比如$z=3x^2+xy$关于$x$的偏导数就为$z_x=6x+y$,这个时候$y$相当于$x$的系数。
|
||||||
|
|
||||||
|
|
@ -138,31 +203,35 @@ $$
|
||||||
A\nu = \lambda \nu
|
A\nu = \lambda \nu
|
||||||
$$
|
$$
|
||||||
|
|
||||||
$\lambda$为特征向量$\vec{v}$对应的特征值。特征值分解是将一个矩阵分解为如下形式:
|
$\lambda$为特征向量$\vec{v}$对应的特征值。特征值分解是将一个矩阵分解为如下形式:
|
||||||
|
|
||||||
$$
|
$$
|
||||||
A=Q\sum Q^{-1}
|
A=Q\sum Q^{-1}
|
||||||
$$
|
$$
|
||||||
|
|
||||||
其中,$Q$是这个矩阵$A$的特征向量组成的矩阵,$\sum$是一个对角矩阵,每一个对角线元素就是一个特征值,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)。也就是说矩阵$A$的信息可以由其特征值和特征向量表示。
|
其中,$Q$是这个矩阵$A$的特征向量组成的矩阵,$\sum$是一个对角矩阵,每一个对角线元素就是一个特征值,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)。也就是说矩阵$A$的信息可以由其特征值和特征向量表示。
|
||||||
|
|
||||||
## 1.9 奇异值与特征值有什么关系?
|
## 1.9 奇异值与特征值有什么关系?
|
||||||
那么奇异值和特征值是怎么对应起来的呢?我们将一个矩阵$A$的转置乘以$A$,并对$AA^T$求特征值,则有下面的形式:
|
那么奇异值和特征值是怎么对应起来的呢?我们将一个矩阵$A$的转置乘以$A$,并对$AA^T$求特征值,则有下面的形式:
|
||||||
|
|
||||||
$$
|
$$
|
||||||
(A^TA)V = \lambda V
|
(A^TA)V = \lambda V
|
||||||
$$
|
$$
|
||||||
|
|
||||||
这里$V$就是上面的右奇异向量,另外还有:
|
这里$V$就是上面的右奇异向量,另外还有:
|
||||||
|
|
||||||
$$
|
$$
|
||||||
\sigma_i = \sqrt{\lambda_i}, u_i=\frac{1}{\sigma_i}A\mu_i
|
\sigma_i = \sqrt{\lambda_i}, u_i=\frac{1}{\sigma_i}A\mu_i
|
||||||
$$
|
$$
|
||||||
|
|
||||||
这里的$\sigma$就是奇异值,$u$就是上面说的左奇异向量。【证明那个哥们也没给】
|
这里的$\sigma$就是奇异值,$u$就是上面说的左奇异向量。【证明那个哥们也没给】
|
||||||
奇异值$\sigma$跟特征值类似,在矩阵$\sum$中也是从大到小排列,而且$\sigma$的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前$r$($r$远小于$m、n$)个的奇异值来近似描述矩阵,即部分奇异值分解:
|
奇异值$\sigma$跟特征值类似,在矩阵$\sum$中也是从大到小排列,而且$\sigma$的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前$r$($r$远小于$m、n$)个的奇异值来近似描述矩阵,即部分奇异值分解:
|
||||||
|
|
||||||
$$
|
$$
|
||||||
A_{m\times n}\thickapprox U_{m \times r}\sum_{r\times r}V_{r \times n}^T
|
A_{m\times n}\approx U_{m \times r}\sum_{r\times r}V_{r \times n}^T
|
||||||
$$
|
$$
|
||||||
|
|
||||||
右边的三个矩阵相乘的结果将会是一个接近于$A$的矩阵,在这儿,$r$越接近于$n$,则相乘的结果越接近于$A$。
|
右边的三个矩阵相乘的结果将会是一个接近于$A$的矩阵,在这儿,$r$越接近于$n$,则相乘的结果越接近于$A$。
|
||||||
|
|
||||||
## 1.10 机器学习为什么要使用概率?
|
## 1.10 机器学习为什么要使用概率?
|
||||||
事件的概率是衡量该事件发生的可能性的量度。虽然在一次随机试验中某个事件的发生是带有偶然性的,但那些可在相同条件下大量重复的随机试验却往往呈现出明显的数量规律。
|
事件的概率是衡量该事件发生的可能性的量度。虽然在一次随机试验中某个事件的发生是带有偶然性的,但那些可在相同条件下大量重复的随机试验却往往呈现出明显的数量规律。
|
||||||
|
|
@ -184,7 +253,7 @@ $$
|
||||||
> 当变量$x$值为100的概率为1的话,那么$x=100$就是确定了的,不会再有变化,除非有进一步运算.
|
> 当变量$x$值为100的概率为1的话,那么$x=100$就是确定了的,不会再有变化,除非有进一步运算.
|
||||||
> 当变量$x$的值为100的概率不为1,比如为50的概率是0.5,为100的概率是0.5,那么这个变量就是会随不同条件而变化的,是随机变量,取到50或者100的概率都是0.5,即50%。
|
> 当变量$x$的值为100的概率不为1,比如为50的概率是0.5,为100的概率是0.5,那么这个变量就是会随不同条件而变化的,是随机变量,取到50或者100的概率都是0.5,即50%。
|
||||||
|
|
||||||
## 1.12 常见概率分布?
|
## 1.12 常见概率分布
|
||||||
(https://wenku.baidu.com/view/6418b0206d85ec3a87c24028915f804d2b168707)
|
(https://wenku.baidu.com/view/6418b0206d85ec3a87c24028915f804d2b168707)
|
||||||

|

|
||||||

|

|
||||||
|
|
@ -196,6 +265,7 @@ $$
|
||||||
|
|
||||||
## 1.13 举例理解条件概率
|
## 1.13 举例理解条件概率
|
||||||
条件概率公式如下:
|
条件概率公式如下:
|
||||||
|
|
||||||
$$
|
$$
|
||||||
P(A/B) = P(A\cap B) / P(B)
|
P(A/B) = P(A\cap B) / P(B)
|
||||||
$$
|
$$
|
||||||
|
|
@ -220,18 +290,22 @@ $$
|
||||||
## 1.15 条件概率的链式法则
|
## 1.15 条件概率的链式法则
|
||||||
由条件概率的定义,可直接得出下面的乘法公式:
|
由条件概率的定义,可直接得出下面的乘法公式:
|
||||||
乘法公式 设$A, B$是两个事件,并且$P(A) > 0$, 则有
|
乘法公式 设$A, B$是两个事件,并且$P(A) > 0$, 则有
|
||||||
|
|
||||||
$$
|
$$
|
||||||
P(AB) = P(B|A)P(A)
|
P(AB) = P(B|A)P(A)
|
||||||
$$
|
$$
|
||||||
|
|
||||||
推广
|
推广
|
||||||
|
|
||||||
$$
|
$$
|
||||||
P(ABC)=P(C|AB)P(B)P(B|A)P(A)
|
P(ABC)=P(C|AB)P(B|A)P(A)
|
||||||
$$
|
$$
|
||||||
|
|
||||||
一般地,用归纳法可证:若$P(A_1A_2...A_n)>0$,则有
|
一般地,用归纳法可证:若$P(A_1A_2...A_n)>0$,则有
|
||||||
|
|
||||||
$$
|
$$
|
||||||
P(A_1A_2...A_n)=P(A_n|A_1A_2...A_{n-1}P(A_{n-1}|A_1A_2...A_{n-2})...P(A_2|A_1)P(A_1)
|
P(A_1A_2...A_n)=P(A_n|A_1A_2...A_{n-1})P(A_{n-1}|A_1A_2...A_{n-2})...P(A_2|A_1)P(A_1)
|
||||||
|
=P(A_1)\prod_{i=2}^{n}P(A_i|A_1A_2...A_{i-1})
|
||||||
$$
|
$$
|
||||||
|
|
||||||
任何多维随机变量联合概率分布,都可以分解成只有一个变量的条件概率相乘形式。
|
任何多维随机变量联合概率分布,都可以分解成只有一个变量的条件概率相乘形式。
|
||||||
|
|
@ -241,16 +315,20 @@ $$
|
||||||
两个随机变量$x$和$y$,概率分布表示成两个因子乘积形式,一个因子只包含$x$,另一个因子只包含$y$,两个随机变量相互独立(independent)。
|
两个随机变量$x$和$y$,概率分布表示成两个因子乘积形式,一个因子只包含$x$,另一个因子只包含$y$,两个随机变量相互独立(independent)。
|
||||||
条件有时为不独立的事件之间带来独立,有时也会把本来独立的事件,因为此条件的存在,而失去独立性。
|
条件有时为不独立的事件之间带来独立,有时也会把本来独立的事件,因为此条件的存在,而失去独立性。
|
||||||
举例:$P(XY)=P(X)P(Y)$, 事件$X$和事件$Y$独立。此时给定$Z$,
|
举例:$P(XY)=P(X)P(Y)$, 事件$X$和事件$Y$独立。此时给定$Z$,
|
||||||
|
|
||||||
$$
|
$$
|
||||||
P(X,Y|Z) \not = P(X|Z)P(Y|Z)
|
P(X,Y|Z) \not = P(X|Z)P(Y|Z)
|
||||||
$$
|
$$
|
||||||
|
|
||||||
事件独立时,联合概率等于概率的乘积。这是一个非常好的数学性质,然而不幸的是,无条件的独立是十分稀少的,因为大部分情况下,事件之间都是互相影响的。
|
事件独立时,联合概率等于概率的乘积。这是一个非常好的数学性质,然而不幸的是,无条件的独立是十分稀少的,因为大部分情况下,事件之间都是互相影响的。
|
||||||
|
|
||||||
**条件独立性**
|
**条件独立性**
|
||||||
给定$Z$的情况下,$X$和$Y$条件独立,当且仅当
|
给定$Z$的情况下,$X$和$Y$条件独立,当且仅当
|
||||||
|
|
||||||
$$
|
$$
|
||||||
X\bot Y|Z \iff P(X,Y|Z) = P(X|Z)P(Y|Z)
|
X\bot Y|Z \iff P(X,Y|Z) = P(X|Z)P(Y|Z)
|
||||||
$$
|
$$
|
||||||
|
|
||||||
$X$和$Y$的关系依赖于$Z$,而不是直接产生。
|
$X$和$Y$的关系依赖于$Z$,而不是直接产生。
|
||||||
|
|
||||||
>**举例**定义如下事件:
|
>**举例**定义如下事件:
|
||||||
|
|
@ -262,13 +340,11 @@ $$
|
||||||
## 1.17 期望、方差、协方差、相关系数总结
|
## 1.17 期望、方差、协方差、相关系数总结
|
||||||
**期望**
|
**期望**
|
||||||
在概率论和统计学中,数学期望(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和。它反映随机变量平均取值的大小。
|
在概率论和统计学中,数学期望(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和。它反映随机变量平均取值的大小。
|
||||||
线性运算: $E(ax+by+c) = aE(x)+bE(y)+c$
|
- 线性运算: $E(ax+by+c) = aE(x)+bE(y)+c$
|
||||||
推广形式: $E(\sum_{k=1}^{n}{a_ix_i+c}) = \sum_{k=1}^{n}{a_iE(x_i)x_i+c}$
|
- 推广形式: $E(\sum_{k=1}^{n}{a_ix_i+c}) = \sum_{k=1}^{n}{a_iE(x_i)+c}$
|
||||||
函数期望:设$f(x)$为$x$的函数,则$f(x)$的期望为
|
- 函数期望:设$f(x)$为$x$的函数,则$f(x)$的期望为
|
||||||
|
- 离散函数: $E(f(x))=\sum_{k=1}^{n}{f(x_k)P(x_k)}$
|
||||||
离散函数: $E(f(x))=\sum_{k=1}^{n}{f(x_k)P(x_k)}$
|
- 连续函数: $E(f(x))=\int_{-\infty}^{+\infty}{f(x)p(x)dx}$
|
||||||
|
|
||||||
连续函数: $E(f(x))=\int_{-\infty}^{+\infty}{f(x)p(x)dx}$
|
|
||||||
|
|
||||||
> 注意:
|
> 注意:
|
||||||
>
|
>
|
||||||
|
|
@ -278,8 +354,8 @@ $$
|
||||||
|
|
||||||
**方差**
|
**方差**
|
||||||
|
|
||||||
概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。
|
概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。方差是一种特殊的期望。定义为:
|
||||||
方差是一种特殊的期望。定义为:
|
|
||||||
$$
|
$$
|
||||||
Var(x) = E((x-E(x))^2)
|
Var(x) = E((x-E(x))^2)
|
||||||
$$
|
$$
|
||||||
|
|
@ -292,23 +368,36 @@ $$
|
||||||
> 4)如果$X$和$Y$相互独立, $Var(ax+by)=a^2Var(x)+b^2Var(y)$
|
> 4)如果$X$和$Y$相互独立, $Var(ax+by)=a^2Var(x)+b^2Var(y)$
|
||||||
|
|
||||||
**协方差**
|
**协方差**
|
||||||
协方差是衡量两个变量线性相关性强度及变量尺度。
|
协方差是衡量两个变量线性相关性强度及变量尺度。 两个随机变量的协方差定义为:
|
||||||
两个随机变量的协方差定义为:
|
|
||||||
$$
|
$$
|
||||||
Cov(x,y)=E((x-E(x))(y-E(y)))
|
Cov(x,y)=E((x-E(x))(y-E(y)))
|
||||||
$$
|
$$
|
||||||
|
|
||||||
方差是一种特殊的协方差。当$X=Y$时,$Cov(x,y)=Var(x)=Var(y)$。
|
方差是一种特殊的协方差。当$X=Y$时,$Cov(x,y)=Var(x)=Var(y)$。
|
||||||
|
|
||||||
> 协方差性质:
|
> 协方差性质:
|
||||||
>
|
>
|
||||||
> 1)独立变量的协方差为0。
|
> 1)独立变量的协方差为0。
|
||||||
> 2)协方差计算公式:$$ Cov(\sum_{i=1}^{m}{a_ix_i}, \sum_{j=1}^{m}{b_jy_j}) = \sum_{i=1}^{m} \sum_{j=1}^{m}{a_ib_jCov(x_iy_i)} $$
|
> 2)协方差计算公式:
|
||||||
|
|
||||||
|
$$
|
||||||
|
Cov(\sum_{i=1}^{m}{a_ix_i}, \sum_{j=1}^{m}{b_jy_j}) = \sum_{i=1}^{m} \sum_{j=1}^{m}{a_ib_jCov(x_iy_i)}
|
||||||
|
$$
|
||||||
|
|
||||||
>
|
>
|
||||||
> 3)特殊情况:$$ Cov(a+bx, c+dy) = bdCov(x, y) $$
|
> 3)特殊情况:
|
||||||
|
|
||||||
|
$$
|
||||||
|
Cov(a+bx, c+dy) = bdCov(x, y)
|
||||||
|
$$
|
||||||
|
|
||||||
**相关系数**
|
**相关系数**
|
||||||
相关系数是研究变量之间线性相关程度的量。
|
相关系数是研究变量之间线性相关程度的量。两个随机变量的相关系数定义为:
|
||||||
两个随机变量的相关系数定义为:$$ Corr(x,y) = \frac{Cov(x,y)}{\sqrt{Var(x)Var(y)}} $$
|
|
||||||
|
$$
|
||||||
|
Corr(x,y) = \frac{Cov(x,y)}{\sqrt{Var(x)Var(y)}}
|
||||||
|
$$
|
||||||
|
|
||||||
> 相关系数的性质:
|
> 相关系数的性质:
|
||||||
> 1)有界性。相关系数的取值范围是 ,可以看成无量纲的协方差。
|
> 1)有界性。相关系数的取值范围是 ,可以看成无量纲的协方差。
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 388 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 259 KiB |
|
After Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 262 KiB |
|
Before Width: | Height: | Size: 250 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 460 KiB After Width: | Height: | Size: 671 KiB |
|
|
@ -11,4 +11,6 @@ xxx-xxx
|
||||||
**贡献者(排名不分先后):**
|
**贡献者(排名不分先后):**
|
||||||
内容贡献者可自加信息
|
内容贡献者可自加信息
|
||||||
|
|
||||||
|
刘彦超-东南大学
|
||||||
|
|
||||||
###########################################################
|
###########################################################
|
||||||
|
|
@ -151,7 +151,7 @@ sigmoid 激活函数图像如下图所示:
|
||||||
|
|
||||||
深度学习是机器学习的一种,现在深度学习比较火爆。在传统机器学习中,手工设计特征对学习效果很重要,但是特征工程非常繁琐。而深度学习能够从大数据中自动学习特征,这也是深度学习在大数据时代受欢迎的一大原因。
|
深度学习是机器学习的一种,现在深度学习比较火爆。在传统机器学习中,手工设计特征对学习效果很重要,但是特征工程非常繁琐。而深度学习能够从大数据中自动学习特征,这也是深度学习在大数据时代受欢迎的一大原因。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
@ -179,8 +179,6 @@ sigmoid 激活函数图像如下图所示:
|
||||||
|
|
||||||
设最终中误差为 $ E $,对于输出那么 $ E $ 对于输出节点 $ y_l $ 的偏导数是 $ y_l - t_l $,其中 $ t_l $ 是真实值,$ \frac{\partial y_l}{\partial z_l} $ 是指上面提到的激活函数,$ z_l $ 是上面提到的加权和,那么这一层的 $ E $ 对于 $ z_l $ 的偏导数为 $ \frac{\partial E}{\partial z_l} = \frac{\partial E}{\partial y_l} \frac{\partial y_l}{\partial z_l} $。同理,下一层也是这么计算,只不过 $ \frac{\partial E}{\partial y_k} $ 计算方法变了,一直反向传播到输入层,最后有 $ \frac{\partial E}{\partial x_i} = \frac{\partial E}{\partial y_j} \frac{\partial y_j}{\partial z_j} $,且 $ \frac{\partial z_j}{\partial x_i} = w_i j $。然后调整这些过程中的权值,再不断进行前向传播和反向传播的过程,最终得到一个比较好的结果;
|
设最终中误差为 $ E $,对于输出那么 $ E $ 对于输出节点 $ y_l $ 的偏导数是 $ y_l - t_l $,其中 $ t_l $ 是真实值,$ \frac{\partial y_l}{\partial z_l} $ 是指上面提到的激活函数,$ z_l $ 是上面提到的加权和,那么这一层的 $ E $ 对于 $ z_l $ 的偏导数为 $ \frac{\partial E}{\partial z_l} = \frac{\partial E}{\partial y_l} \frac{\partial y_l}{\partial z_l} $。同理,下一层也是这么计算,只不过 $ \frac{\partial E}{\partial y_k} $ 计算方法变了,一直反向传播到输入层,最后有 $ \frac{\partial E}{\partial x_i} = \frac{\partial E}{\partial y_j} \frac{\partial y_j}{\partial z_j} $,且 $ \frac{\partial z_j}{\partial x_i} = w_i j $。然后调整这些过程中的权值,再不断进行前向传播和反向传播的过程,最终得到一个比较好的结果;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 3.2.2如何计算神经网络的输出?
|
### 3.2.2如何计算神经网络的输出?
|
||||||
|
|
||||||
答案来源:[零基础入门深度学习(3) - 神经网络和反向传播算法](https://www.zybuluo.com/hanbingtao/note/476663)
|
答案来源:[零基础入门深度学习(3) - 神经网络和反向传播算法](https://www.zybuluo.com/hanbingtao/note/476663)
|
||||||
|
|
@ -209,8 +207,6 @@ $$
|
||||||
|
|
||||||
同理,我们还可以计算出 $ y_2 $。这样输出层所有节点的输出值计算完毕,我们就得到了在输入向量 $ x_1, x_2, x_3, x_4 $ 时,神经网络的输出向量 $ y_1, y_2 $, 。这里我们也看到,输出向量的维度和输出层神经元个数相同。
|
同理,我们还可以计算出 $ y_2 $。这样输出层所有节点的输出值计算完毕,我们就得到了在输入向量 $ x_1, x_2, x_3, x_4 $ 时,神经网络的输出向量 $ y_1, y_2 $, 。这里我们也看到,输出向量的维度和输出层神经元个数相同。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 3.2.3如何计算卷积神经网络输出值?
|
### 3.2.3如何计算卷积神经网络输出值?
|
||||||
|
|
||||||
答案来源:[零基础入门深度学习(4) - 卷积神经网络](https://www.zybuluo.com/hanbingtao/note/485480)
|
答案来源:[零基础入门深度学习(4) - 卷积神经网络](https://www.zybuluo.com/hanbingtao/note/485480)
|
||||||
|
|
@ -293,7 +289,6 @@ $$
|
||||||
|
|
||||||
以上就是卷积层的计算方法。这里面体现了局部连接和权值共享:每层神经元只和上一层部分神经元相连(卷积计算规则),且 filter 的权值对于上一层所有神经元都是一样的。对于包含两个 $ 3 * 3 * 3 $ 的 fitler 的卷积层来说,其参数数量仅有 $ (3 * 3 * 3+1) * 2 = 56 $ 个,且参数数量与上一层神经元个数无关。与全连接神经网络相比,其参数数量大大减少了。
|
以上就是卷积层的计算方法。这里面体现了局部连接和权值共享:每层神经元只和上一层部分神经元相连(卷积计算规则),且 filter 的权值对于上一层所有神经元都是一样的。对于包含两个 $ 3 * 3 * 3 $ 的 fitler 的卷积层来说,其参数数量仅有 $ (3 * 3 * 3+1) * 2 = 56 $ 个,且参数数量与上一层神经元个数无关。与全连接神经网络相比,其参数数量大大减少了。
|
||||||
|
|
||||||
|
|
||||||
### 3.2.4 如何计算 Pooling 层输出值输出值?
|
### 3.2.4 如何计算 Pooling 层输出值输出值?
|
||||||
|
|
||||||
Pooling 层主要的作用是下采样,通过去掉 Feature Map 中不重要的样本,进一步减少参数数量。Pooling 的方法很多,最常用的是 Max Pooling。Max Pooling 实际上就是在 n\*n 的样本中取最大值,作为采样后的样本值。下图是 2\*2 max pooling:
|
Pooling 层主要的作用是下采样,通过去掉 Feature Map 中不重要的样本,进一步减少参数数量。Pooling 的方法很多,最常用的是 Max Pooling。Max Pooling 实际上就是在 n\*n 的样本中取最大值,作为采样后的样本值。下图是 2\*2 max pooling:
|
||||||
|
|
@ -624,9 +619,9 @@ $\frac{\partial C}{\partial b}=\frac{1}{n}\sum ({\varsigma}(z)-y)$
|
||||||
|
|
||||||
### 3.4.11 为什么Tanh收敛速度比Sigmoid快?(贡献者:黄钦建-华南理工大学)
|
### 3.4.11 为什么Tanh收敛速度比Sigmoid快?(贡献者:黄钦建-华南理工大学)
|
||||||
|
|
||||||
`$tanh^{,}(x)=1-tanh(x)^{2}\in (0,1)$`
|
$tanh^{,}(x)=1-tanh(x)^{2}\in (0,1)$
|
||||||
|
|
||||||
`$s^{,}(x)=s(x)*(1-s(x))\in (0,\frac{1}{4}]$`
|
$s^{,}(x)=s(x)*(1-s(x))\in (0,\frac{1}{4}]$
|
||||||
|
|
||||||
由上面两个公式可知tanh(x)梯度消失的问题比sigmoid轻,所以Tanh收敛速度比Sigmoid快。
|
由上面两个公式可知tanh(x)梯度消失的问题比sigmoid轻,所以Tanh收敛速度比Sigmoid快。
|
||||||
|
|
||||||
|
|
@ -641,7 +636,7 @@ Batch 的选择,首先决定的是下降的方向。
|
||||||
1. 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。
|
1. 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。
|
||||||
2. 由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。 Full Batch Learning 可以使用 Rprop 只基于梯度符号并且针对性单独更新各权值。
|
2. 由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。 Full Batch Learning 可以使用 Rprop 只基于梯度符号并且针对性单独更新各权值。
|
||||||
|
|
||||||
对于更大的数据集,采用全数据集的形式,坏处是:
|
对于更大的数据集,假如采用全数据集的形式,坏处是:
|
||||||
1. 随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。
|
1. 随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。
|
||||||
2. 以 Rprop 的方式迭代,会由于各个 Batch 之间的采样差异性,各次梯度修正值相互抵消,无法修正。这才有了后来 RMSProp 的妥协方案。
|
2. 以 Rprop 的方式迭代,会由于各个 Batch 之间的采样差异性,各次梯度修正值相互抵消,无法修正。这才有了后来 RMSProp 的妥协方案。
|
||||||
|
|
||||||
|
|
@ -667,12 +662,16 @@ Batch 的选择,首先决定的是下降的方向。
|
||||||
|
|
||||||
### 3.5.5 调节 Batch_Size 对训练效果影响到底如何?
|
### 3.5.5 调节 Batch_Size 对训练效果影响到底如何?
|
||||||
|
|
||||||
1. Batch_Size 太小,可能导致算法不收敛。
|
1. Batch_Size 太小,模型表现效果极其糟糕(error飙升)。
|
||||||
2. 随着 Batch_Size 增大,处理相同数据量的速度越快。
|
2. 随着 Batch_Size 增大,处理相同数据量的速度越快。
|
||||||
3. 随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。
|
3. 随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。
|
||||||
4. 由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
|
4. 由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
|
||||||
5. 由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。
|
5. 由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。
|
||||||
|
|
||||||
|
### 3.5.6 受限于客观条件无法给足够的Batch Size怎么办?
|
||||||
|
|
||||||
|
在极小的情况下(低于十),建议使用[Group Norm](https://arxiv.org/abs/1803.08494)。
|
||||||
|
|
||||||
## 3.6 归一化
|
## 3.6 归一化
|
||||||
|
|
||||||
### 3.6.1 归一化含义?
|
### 3.6.1 归一化含义?
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
[TOC]
|
[TOC]
|
||||||
|
|
||||||
# 第四章 经典网络
|
# 第四章 经典网络
|
||||||
## 4.1 LetNet5
|
## 4.1 LeNet5
|
||||||
|
|
||||||
一种典型的用来识别数字的卷积网络是LeNet-5。
|
一种典型的用来识别数字的卷积网络是LeNet-5。
|
||||||
### 4.1.1 模型结构
|
### 4.1.1 模型结构
|
||||||
|
|
@ -291,7 +291,7 @@ AlexNet共8层,前五层为卷积层,后三层为全连接层。
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
**特征不变性:** 一般来说,小的变化对于模型的第一层都有非常大的影响,但对于最高层的影响却几乎没有。对于图像的平移、尺度、旋转的变化来说,网络的输出对于平移和尺度变化都是稳定的,但却不具有旋转不变性,除非目标图像时旋转对称的。下图为分别对平移,尺度,旋转做的分析图。
|
**特征不变性:** 一般来说,就深度模型来说,只要深度超过七层,微小的变化对于模型的第一层都有比较大的影响,但对于较深层几乎没有没有影响。对于图像的平移、尺度、旋转的变化来说,网络的输出对于平移和尺度变化都是稳定的,但却不具有旋转不变性,除非目标图像时旋转对称的。下图为分别对平移,尺度,旋转做的分析图。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
@ -310,7 +310,6 @@ AlexNet共8层,前五层为卷积层,后三层为全连接层。
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 4.4 VGGNet
|
## 4.4 VGGNet
|
||||||
### 4.4.1 模型结构
|
### 4.4.1 模型结构
|
||||||
|
|
||||||
|
|
@ -320,13 +319,9 @@ AlexNet共8层,前五层为卷积层,后三层为全连接层。
|
||||||
|
|
||||||
|
|
||||||
1. 整个网络都使用了同样大小的卷积核尺寸(3 \* 3)和最大池化尺寸(2 \* 2)
|
1. 整个网络都使用了同样大小的卷积核尺寸(3 \* 3)和最大池化尺寸(2 \* 2)
|
||||||
|
|
||||||
2. 1 \* 1卷积的意义主要在于线性变换,而输入通道数和输出通道数不变,没有发生降维。
|
2. 1 \* 1卷积的意义主要在于线性变换,而输入通道数和输出通道数不变,没有发生降维。
|
||||||
|
3. 两个3 \* 3的卷积层串联相当于1个5 \* 5的卷积层,即一个像素会跟周围5 \* 5的像素产生关联,可以说感受野大小为5 \* 5。而3个3 \* 3的卷积层串联的效果则相当于1个7 \* 7的卷积层。除此之外,3个串联的3 \* 3的卷积层,拥有比1个7 \* 7的卷积层更少的参数量,只有后者的(3 \* 3 \* 3)/(7 \* 7)=55%。最重要的是,3个3 \* 3的卷积层拥有比1个7 \* 7的卷积层更多的非线性变换(前者可以使用三次ReLU激活函数,而后者只有一次),使得CNN对特征的学习能力更强。
|
||||||
|
4. VGGNet在训练时有一个小技巧,先训练级别A的简单网络,再复用A网络的权重来初始化后面的几个复杂模型,这样训练收敛的速度更快。在预测时,VGG采用Multi-Scale的方法,将图像scale到一个尺寸Q,并将图片输入卷积网络计算。然后在最后一个卷积层使用滑窗的方式进行分类预测,将不同窗口的分类结果平均,再将不同尺寸Q的结果平均得到最后结果,这样可提高图片数据的利用率并提升预测准确率。在训练中,VGGNet还使用了Multi-Scale的方法做数据增强,将原始图像缩放到不同尺寸S,然后再随机裁切224*224的图片,这样能增加很多数据量,对于防止模型过拟合有很不错的效果。
|
||||||
1. 两个3 \* 3的卷积层串联相当于1个5 \* 5的卷积层,即一个像素会跟周围5 \* 5的像素产生关联,可以说感受野大小为5 \* 5。而3个3 \* 3的卷积层串联的效果则相当于1个7 \* 7的卷积层。除此之外,3个串联的3 \* 3的卷积层,拥有比1个7 \* 7的卷积层更少的参数量,只有后者的(3 \* 3 \* 3)/(7 \* 7)=55%。最重要的是,3个3 \* 3的卷积层拥有比1个7 \* 7的卷积层更多的非线性变换(前者可以使用三次ReLU激活函数,而后者只有一次),使得CNN对特征的学习能力更强。
|
|
||||||
|
|
||||||
2. VGGNet在训练时有一个小技巧,先训练级别A的简单网络,再复用A网络的权重来初始化后面的几个复杂模型,这样训练收敛的速度更快。在预测时,VGG采用Multi-Scale的方法,将图像scale到一个尺寸Q,并将图片输入卷积网络计算。然后在最后一个卷积层使用滑窗的方式进行分类预测,将不同窗口的分类结果平均,再将不同尺寸Q的结果平均得到最后结果,这样可提高图片数据的利用率并提升预测准确率。在训练中,VGGNet还使用了Multi-Scale的方法做数据增强,将原始图像缩放到不同尺寸S,然后再随机裁切224*224的图片,这样能增加很多数据量,对于防止模型过拟合有很不错的效果。
|
|
||||||
|
|
||||||
## 4.5 Network in Network
|
## 4.5 Network in Network
|
||||||
### 4.5.1 模型结构
|
### 4.5.1 模型结构
|
||||||
|
|
@ -339,7 +334,6 @@ AlexNet共8层,前五层为卷积层,后三层为全连接层。
|
||||||
论文的创新点:
|
论文的创新点:
|
||||||
|
|
||||||
1. 提出了抽象能力更高的Mlpconv层
|
1. 提出了抽象能力更高的Mlpconv层
|
||||||
|
|
||||||
2. 提出了Global Average Pooling(全局平均池化)层
|
2. 提出了Global Average Pooling(全局平均池化)层
|
||||||
|
|
||||||
- Mlpconv层 <br>
|
- Mlpconv层 <br>
|
||||||
|
|
@ -377,11 +371,9 @@ MLP的优点:
|
||||||
|
|
||||||
## 4.6 GoogleNet
|
## 4.6 GoogleNet
|
||||||
### 4.6.1 模型结构
|
### 4.6.1 模型结构
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
### 4.6.2 Inception 结构
|
### 4.6.2 Inception 结构
|
||||||
|
|
||||||

|

|
||||||
|
|
@ -449,7 +441,6 @@ MLP的优点:
|
||||||
<img src="./img/ch4/image37.png"/>
|
<img src="./img/ch4/image37.png"/>
|
||||||
</center>
|
</center>
|
||||||
|
|
||||||
|
|
||||||
- 在梯度为8x8时使用可以增加滤波器输出的模块(如下图),以此来产生高维的稀疏特征。
|
- 在梯度为8x8时使用可以增加滤波器输出的模块(如下图),以此来产生高维的稀疏特征。
|
||||||
|
|
||||||

|

|
||||||
|
|
@ -671,11 +662,9 @@ S. Xie,R. Girshick,P. Dollar,Z. Tu和 K. He在[Aggregated Residual Transfo
|
||||||
|
|
||||||
## 4.9 为什么现在的CNN模型都是在GoogleNet、VGGNet或者AlexNet上调整的?
|
## 4.9 为什么现在的CNN模型都是在GoogleNet、VGGNet或者AlexNet上调整的?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- 评测对比:为了让自己的结果更有说服力,在发表自己成果的时候会同一个标准的baseline及在baseline上改进而进行比较,常见的比如各种检测分割的问题都会基于VGG或者Resnet101这样的基础网络。
|
- 评测对比:为了让自己的结果更有说服力,在发表自己成果的时候会同一个标准的baseline及在baseline上改进而进行比较,常见的比如各种检测分割的问题都会基于VGG或者Resnet101这样的基础网络。
|
||||||
- 时间和精力有限:在科研压力和工作压力中,时间和精力只允许大家在有限的范围探索。
|
- 时间和精力有限:在科研压力和工作压力中,时间和精力只允许大家在有限的范围探索。
|
||||||
- 模型创新难度大:进行基本模型的改进需要大量的实验和尝试,并且需要大量的实验积累和强大灵感,很有可能投入产出比比较小。
|
- 模型创新难度大:进行基本模型的改进需要大量的实验和尝试,并且需要大量的实验积累和强大灵感,很有可能投入产出比比较小。
|
||||||
- 资源限制:创造一个新的模型需要大量的时间和计算资源,往往在学校和小型商业团队不可行。
|
- 资源限制:创造一个新的模型需要大量的时间和计算资源,往往在学校和小型商业团队不可行。
|
||||||
- 在实际的应用场景中,其实是有大量的非标准模型的配置。
|
- 在实际的应用场景中,其实是有大量的非标准模型的配置。
|
||||||
|
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 11 KiB |
|
|
@ -18,3 +18,8 @@ modify_log---->用来记录修改日志
|
||||||
3. 修改modify内容
|
3. 修改modify内容
|
||||||
4. 修改章节内容,图片路径等
|
4. 修改章节内容,图片路径等
|
||||||
|
|
||||||
|
<------Troyliu777-2018-11-13------->
|
||||||
|
1. 修改图片img12 img13 img14
|
||||||
|
2. 修改第五章内容,杨文英的部分还未合并进来
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,48 +1,41 @@
|
||||||
# 第五章 卷积神经网络(CNN)
|
[TOC]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 第五章 卷积神经网络(CNN)
|
||||||
|
|
||||||
|
标签(空格分隔): 原创性 深度学习 协作
|
||||||
|
卷积神经网络负责人:
|
||||||
|
|
||||||
|
重庆大学研究生-刘畅 787913208@qq.com;
|
||||||
|
|
||||||
|
铪星创新科技联合创始人-杨文英;
|
||||||
|
|
||||||
标签(空格分隔): 深度学习
|
|
||||||
---
|
|
||||||
Markdown Revision 1;
|
Markdown Revision 1;
|
||||||
Date: 2018/11/08
|
Date: 2018/11/08
|
||||||
Editor: 李骁丹-杜克大学
|
Editor: 李骁丹-杜克大学
|
||||||
Contact: xiaodan.li@duke.edu
|
Contact: xiaodan.li@duke.edu
|
||||||
## 5.1 卷积神经网络的组成层
|
## 5.1 卷积神经网络的组成层
|
||||||
1. 卷积神经网络主要应用于具有网格拓扑结构的数据集。
|
在卷积神经网络中,一般包含5种类型的层:
|
||||||
2. 卷积神经网络在语音识别,图像处理以及人脸识别方面有了广泛的应用并取得了巨大的成功。
|
> * 输入层
|
||||||
3. 卷积神经网络主要包含3种层:
|
> * 卷积运算层
|
||||||
|
> * 激活函数层
|
||||||
|
> * 池化层
|
||||||
|
> * 全连接层
|
||||||
|
|
||||||
> * 卷积运算层:该层利用过滤器对输入特征进行卷积化以获得本地特征。本地特征构成特征图(feature map)。
|
**输入层**主要包含对原始图像进行预处理,包括白化、归一化、去均值等等。
|
||||||
> * 池化层: 池化操作包括取最值,取和以及取平均。池化操作将作用于特征图(feature map)。
|
|
||||||
> * 全连接层:基于池化层结果,全连接层将进行将分类预测等操作。
|
|
||||||
|
|
||||||
一个完整的神经网络就是由这三种层叠加组成的。
|
**卷积运算层**主要使用滤波器,通过设定步长、深度等参数,对输入进行不同层次的特征提取。滤波器中的参数可以通过反向传播算法进行学习。
|
||||||
|
|
||||||
**结构示例**
|
**激活函数层**主要是将卷积层的输出做一个非线性映射。常见的激活函数包括sigmoid,tanh,Relu等。
|
||||||
|
|
||||||
拿CIFAR-10数据集举例,一个典型的卷积神经网络分类器应该有[INPUT - CONV - RELU - POOL - FC]的结构,
|
**池化层**主要是用于参数量压缩。可以减轻过拟合情况。常见的有平均池化和最大值池化,不包含需要学习的参数。
|
||||||
|
|
||||||
> * INPUT[32\*32\*3]包含原始图片数据中的全部像素,长宽都是32,有RGB 3个颜色通道。
|
**全连接层**主要是指两层网络,所有神经元之间都有权重连接。常见用于网络的最后一层,用于计算类别得分。
|
||||||
> * CONV卷积层中,每个神经元会和上一层的若干小区域连接,计算权重和小区域像素的内积,比如结果数据为[32\*32\*12]的。
|
|
||||||
> * RELU层,就是神经元激励层,主要的计算就是max(0,x),结果数据依旧是[32\*32\*12]。
|
|
||||||
> * POOLing层操作可以理解成一个下采样,得到的结果维度就变为[16\*16\*12]。
|
|
||||||
> * 全连接层一般用于最后计算类别得分,得到的结果为[1\*1\*10],其中的10对应10个不同的类别。该层的所有神经元会和上一层的所有神经元连接。
|
|
||||||
|
|
||||||
这样,卷积神经网络作为一个中间通道,就一步步把原始图像数据转成最后的类别得分。有一点我们要提一下,刚才提及的几种不同神经网络层,其中有一些层是需要进行参数训练,另外一些不需要。详细一点说,卷积层和全连接层包含权重和偏移;而RELU和POOLing层只是一个固定的函数运算,是不包含权重和偏移参数的。不过POOLing层包含了我们手动指定的超参数。
|
|
||||||
|
|
||||||
**总结一下**:
|
|
||||||
|
|
||||||
* 一个卷积神经网络由多种不同类型的层(卷积层/RELU层/POOLing层/全连接层等)叠加而成。
|
|
||||||
* 每一层的输入结构是3维的数据,计算完输出依旧是3维的数据。
|
|
||||||
* 卷积层和全连接层包含训练参数,但是RELU 和 POOLing 层不包含。
|
|
||||||
* 卷积层,全连接层和 POOLing 层包含超参数,RELU 层没有。
|
|
||||||
|
|
||||||
下图为 CIFAR-10 数据集构建的一个卷积神经网络结构示意图:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 5.2 卷积如何检测边缘信息?
|
## 5.2 卷积如何检测边缘信息?
|
||||||
|
卷积运算是卷积神经网络最基本的组成部分。在神经网络中,以物体识别为例,特征的检测情况可大致做一下划分。前几层检测到的是一些边缘特征,中间几层检测到的是物体的局部区域,靠后的几层检测到的是完整物体。每个阶段特征的形成都是由多组滤波器来完成的。而其中的边缘检测部分是由滤波器来完成的。在传统的图像处理方法里面,有许多边缘检测算子,如canny算子。使用固定的模板来进行边缘检测。
|
||||||
|
|
||||||
卷积运算是卷积神经网络最基本的组成部分。神经网络的前几层首先检测边缘,接下来的层有可能检测到物体的部分区域,更靠后的一些层可能检测到完整的物体。
|
|
||||||
先介绍一个概念,过滤器:
|
先介绍一个概念,过滤器:
|
||||||
|
|
||||||

|

|
||||||
|
|
@ -77,156 +70,103 @@
|
||||||
|
|
||||||
这就是检测物体垂直边缘的例子,水平边缘的话只需将过滤器旋转90度。
|
这就是检测物体垂直边缘的例子,水平边缘的话只需将过滤器旋转90度。
|
||||||
|
|
||||||
## 5.3 卷积的几个基本定义?
|
## 5.3 卷积层中的几个基本参数?
|
||||||
|
|
||||||
首先,我们需要定义卷积层参数。
|
在卷积层中,有一些我们常用的参数,定义如下
|
||||||
|
|
||||||
### 5.3.1 卷积核大小
|
### 5.3.1 卷积核大小
|
||||||
|
英文名是Kernel Size:卷积核的大小定义了卷积的感受野。二维卷积的核大小选择通常是3,即3×3。
|
||||||
(Kernel Size): 卷积核大小定义了卷积的视图范围。针对二维,通常选择大小是3,即3×3像素。
|
|
||||||
|
|
||||||
### 5.3.2 卷积核的步长
|
### 5.3.2 卷积核的步长
|
||||||
|
英文名是Stride: Stride定义了卷积核在卷积过程中的步长。虽然它的默认值通常为1,但我们可以将步长设置为2,可以实现类似于pooling的下采样功能。
|
||||||
(Stride): Stride定义了卷积核步长。虽然它的默认值通常为1,但我们可以将步长设置为2,然后对类似于MaxPooling的图像进行向下采样。
|
|
||||||
|
|
||||||
### 5.3.3 边缘填充
|
### 5.3.3 边缘填充
|
||||||
|
英文名是Padding: Padding用于填充输入图像的边界。一个(半)填充的卷积将使空间输出维度与输入相等,而如果卷积核大于1,则对于未被填充的图像,卷积后将会使图像一些边界消失。
|
||||||
(Padding): Padding用于填充输入图像的边界。一个(半)填充的卷积将使空间输出维度与输入相等,而如果卷积核大于1,则未被填充的卷积将会使一些边界消失。
|
|
||||||
|
|
||||||
### 5.3.4 输入和输出通道
|
### 5.3.4 输入和输出通道
|
||||||
|
英文名是 Input/Output Channels 一个卷积层接受一定数量的输入通道I,并计算一个特定数量的输出通道O,这一层所需的参数可以由I*O*K计算,K等于卷积核中参数的数量。
|
||||||
一个卷积层接受一定数量的输入通道(I),并计算一个特定数量的输出通道(O),这一层所需的参数可以由I\*O\*K计算,K等于卷积核中值的数量。
|
|
||||||
|
|
||||||
## 5.4 卷积的网络类型分类?
|
## 5.4 卷积的网络类型分类?
|
||||||
|
|
||||||
### 5.4.1 普通卷积
|
### 5.4.1 普通卷积
|
||||||
普通卷积如下图所示。
|
普通卷积即如下图所示,使用一个固定大小的滤波器,对图像进行加权提特征。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 5.4.2 扩张卷积
|
### 5.4.2 扩张卷积
|
||||||
|
扩张卷积,又称为带孔(atrous)卷积或者空洞(dilated)卷积。在使用扩张卷积时,会引入一个称作扩张率(dilation rate)的参数。该参数定义了卷积核内参数间的行(列)间隔数。例如下图所示,一个3×3的卷积核,扩张率为2,它的感受野与5×5卷积核相同,而仅使用9个参数。这样做的好处是,在参数量不变的情况下,可以获得更大的感受野。扩张卷积在实时分割领域应用非常广泛。
|
||||||
又名空洞(atrous)卷积,扩张的卷积引入了另一个被称为扩张率(dilation rate)的卷积层。扩张率定义了卷积核中值之间的间隔。一个3×3卷积核的扩张率为2,它的视图与5×5卷积核相同,而只使用9个参数。一个5×5卷积核,每两行或两列删除一行或一列。
|
|
||||||
|
|
||||||
这将以同样的计算代价提供更广阔的视角。扩张的卷积在实时分割领域特别受欢迎。如果需要广泛视图,但不能负担较多个卷积或更大的卷积核,往往会使用扩张卷积。
|
|
||||||
举例:
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 5.4.3 转置卷积
|
### 5.4.3 转置卷积
|
||||||
|
转置卷积也就是反卷积(deconvolution)。虽然有些人经常直接叫它反卷积,但严格意义上讲是不合适的,因为它不符合一个反卷积的概念。反卷积确实存在,但它们在深度学习领域并不常见。一个实际的反卷积会恢复卷积的过程。想象一下,将一个图像放入一个卷积层中。现在把输出传递到一个黑盒子里,然后你的原始图像会再次出来。这个黑盒子就完成了一个反卷积。这是一个卷积层的数学逆过程。
|
||||||
|
|
||||||
转置卷积也称反卷积(deconvolution)。虽然有些人经常直接叫其反卷积,但严格意义上讲是不合适的,因为它不符合反卷积的基本概念。反卷积确实存在,但它们在深度学习领域并不常见。一个实际的反卷积会恢复卷积的过程。将一个图像放入一个卷积层中。接着把输出传输到一个黑盒子里,最后该黑盒将输出原始图像。这个黑盒子就完成了一个反卷积。其是卷积层的数学逆过程。
|
一个转置的卷积在某种程度上是相似的,因为它产生的空间分辨率是跟反卷积后产生的分辨率相同。不同之处是在卷积核值上执行的实际数学操作。转置卷积层使用的是常规的卷积,但是它能够恢复其空间变换。
|
||||||
|
|
||||||
转置卷积在某种程度上与反卷积类似,因为它在相同的空间分辨率下,是一个假设的反卷积层。然而,在数值上执行的实际数学操作是不同的。一个转置卷积层执行一个常规的卷积,但是它会恢复它的空间变换(spatial transformation)。
|
|
||||||
|
|
||||||
在这一点上,你应该非常困惑,让我们来看一个具体的例子:
|
|
||||||
5×5的图像被馈送到一个卷积层。步长设置为2,无边界填充,而卷积核是3×3。结果得到了2×2的图像。
|
|
||||||
如果想要逆转这个过程,我们需要反向的数学运算,以便从我们输入的每个像素中生成9个值。我们将步长设置为2来遍历输出图像。这就是一个反卷积过程。
|
|
||||||
|
|
||||||
|
在这一点上,让我们来看一个具体的例子:
|
||||||
|
将5×5的图像送到一个卷积层。步长设置为2,无边界填充,而卷积核是3×3。结果得到了2×2的图像。如果我们想要逆向该过程,则需要数学上的逆运算,以便从输入的每个像素值中生成9个值。然后,我们将步长设置为2来遍历输出图像。这就是一个反卷积过程。
|
||||||

|

|
||||||
|
转置卷积的实现过程则不同。为了保证输出将是一个5×5的图像,在使用卷积运算时,我们需要在输入上执行一些特别的填充。而这一过程并不是逆转了卷积运算,它仅仅是重新构造了之前的空间分辨率并进行了卷积运算。这样的做法并不是数学上的逆过程,但是很适用于编码-解码器(Encoder-Decoder)架构。我们就可以把图像的上采样(upscaling)和卷积操作结合起来,而不是做两个分离的过程。
|
||||||
一个转置的卷积做法与此不同。唯一的共同点是,它的输出仍然是一个5×5的图像,但其实际上执行的是正常卷积运算。为了实现这一点,我们需要在输入上执行一些奇特的填充。
|
|
||||||
|
|
||||||
因此这一步不会逆转上面的过程。至少不考虑数值。
|
|
||||||
|
|
||||||
它仅仅是重新构造了之前的空间分辨率并进行了卷积运算。这不是数学上的逆过程,但是对于编码-解码器(Encoder-Decoder)架构来说,这仍然是非常有用的。这样我们就可以把图像的尺度上推(upscaling)和卷积结合起来,而不是做两个分离的过程。
|
|
||||||
|
|
||||||
如果我们想反转这个过程,我们需要反数学运算,以便从我们输入的每个像素中生成9个值。之后,我们以2步幅的设置来遍历输出图像。这将是一个反卷积。
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 5.4.4 可分离卷积
|
### 5.4.4 可分离卷积
|
||||||
|
在一个可分离卷积中,我们可以将内核操作拆分成多个步骤。我们用y = conv(x,k)表示卷积,其中y是输出图像,x是输入图像,k是核大小。这一步很简单。接下来,我们假设k可以由下面这个等式计算得出:k = k1.dot(k2)。这将使它成为一个可分离的卷积,因为我们可以通过对k1和k2做2个一维卷积来取得相同的结果,而不是用k做二维卷积。
|
||||||
在一个可分离卷积中,我们可以将内核操作拆分成多个步骤。我们用y = conv(x,k)表示卷积,其中y是输出图像,x是输入图像,k是内核。这一步很简单。接下来,我们假设k可以由下面这个等式计算得出:k = k1.dot(k2)。这将使它成为一个可分离的卷积,因为我们可以通过对k1和k2做2个一维卷积来取得相同的结果,而不是用k做二维卷积。
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
我们以通常用于图像处理的Sobel内核为例。你可以通过乘以向量[1,0,-1]和[1,2,1] .T获得相同的内核。在执行相同的操作时,你只需要6个而不是9个参数。
|
以图像处理中的Sobel算子为例。你可以通过乘以向量[1,0,-1]和[1,2,1] .T获得相同的核大小。在执行相同的操作时,你只需要6个参数,而不是9个。上面的示例显示了所谓的空间可分离卷积。即将一个二维的卷积分离成两个一维卷积的操作。在神经网络中,为了减少网络参数,加速网络运算速度。我们通常使用的是一种叫深度可分离卷积的神经网络。
|
||||||
|
|
||||||
上面的示例显示了所谓的空间可分离卷积,据我所知,这并不是在深度学习中使用的。我只是想确保在他人费劲地操作时,你不会受到如此困惑。在神经网络中,我们通常使用的是一种叫做深度可分离卷积的神经网络。
|
|
||||||
|
|
||||||
## 5.5 图解12种不同类型的2D卷积?
|
## 5.5 图解12种不同类型的2D卷积?
|
||||||
|
|
||||||
http://www.sohu.com/a/159591827_390227
|
http://www.sohu.com/a/159591827_390227
|
||||||
|
|
||||||
## 5.6 2D卷积与3D卷积有什么区别?
|
## 5.6 2D卷积与3D卷积有什么区别?
|
||||||
|
|
||||||
### 5.6.1 2D卷积
|
### 5.6.1 2D卷积
|
||||||
|
二维卷积操作如图所示,为了更直观的说明,分别展示了单通道和多通道的操作。假定只使用了1个滤波器,即输出图像只有一个channel。其中,针对单通道,输入图像的channel为1,卷积核尺寸为 (k_h, k_w, 1),卷积核在输入图像的空间维度上进行滑窗操作,每次滑窗和 (k_h, k_w)窗口内的值进行卷积操作,得到输出图像中的一个值。针对多通道,假定输入图像的channel为3,卷积核尺寸则为 (k_h, k_w, 3),则每次滑窗与3个channels上的 (k_h, k_w)窗口内的所有值进行卷积操作,得到输出图像中的一个值。
|
||||||
2D卷积操作如图所示,为了解释的更清楚,分别展示了单通道和多通道的操作。且为了画图方便,假定只有1个filter,即输出图像只有一个chanel。
|
|
||||||
|
|
||||||
其中,针对单通道,输入图像的channel为1,卷积核尺寸为 (k_h, k_w, 1),卷积核在输入图像上的的空间维度(即(height,width)两维)上进行进行滑窗操作,每次滑窗和 (k_h, k_w) 窗口内的values进行卷积操作(现在都用相关操作取代),得到输出图像中的一个value。针对多通道,假定输入图像的channel为3,卷积核尺寸为 (k_h, k_w, 3), 卷积核在输入图像上的的空间维度(即(h, w)两维)上进行进行滑窗操作,每次滑窗与3个channels上的 (k_h, k_w) 窗口内的所有的values进行相关操作,得到输出图像中的一个value。
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 5.6.2 3D卷积
|
### 5.6.2 3D卷积
|
||||||
|
3D卷积操作如图所示,同样分为单通道和多通道,且假定只使用1个滤波器,即输出图像仅有一个channel。其中,针对单通道,与2D卷积不同之处在于,输入图像多了一个length维度,卷积核也多了一个k_l维度,因此3D卷积核的尺寸为(k_h, k_w, k_l),每次滑窗与 (k_h, k_w, k_l)窗口内的值进行相关操作,得到输出3D图像中的一个值.针对多通道,则与2D卷积的操作一样,每次滑窗与3个channels上的 (k_h, k_w, k_l) 窗口内的所有值进行相关操作,得到输出3D图像中的一个值。
|
||||||
3D卷积操作如图2所示,同样分为单通道和多通道,且只使用一个filter,输出一个channel。其中,针对单通道,与2D卷积不同之处在于,输入图像多了一个 length 维度,卷积核也多了一个k_l维度,因此卷积核在输入3D图像的空间维度(height和widthw维)和length维度上均进行滑窗操作,每次滑窗与 (k_h, k_w, k_l) 窗口内的values进行相关操作,得到输出3D图像中的一个value.
|
|
||||||
|
|
||||||
针对多通道,则与2D卷积的操作一样,每次滑窗与3个channels上的 (k_h, k_w, k_l) 窗口内的所有values进行相关操作,得到输出3D图像中的一个value。
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 5.7 有哪些池化方法?
|
## 5.7 有哪些池化方法?
|
||||||
|
在构建卷积神经网络时,经常会使用池化操作,而池化层往往在卷积层后面,通过池化操作来降低卷积层输出的特征维度,同时可以防止过拟合现象。池化操作可以降低图像维度的原因,本质上是因为图像具有一种“静态性”的属性,这个意思是说在一个图像区域有用的特征极有可能在另一个区域同样有用。因此,为了描述一个大的图像,很直观的想法就是对不同位置的特征进行聚合统计。例如,可以计算图像在固定区域上特征的平均值 (或最大值)来代表这个区域的特征。[1]
|
||||||
在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合)。
|
|
||||||
|
|
||||||
为什么可以通过降低维度呢?
|
|
||||||
|
|
||||||
因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)来代表这个区域的特征。
|
|
||||||
|
|
||||||
### 5.7.1 一般池化(General Pooling)
|
### 5.7.1 一般池化(General Pooling)
|
||||||
池化作用于图像中不重合的区域(这与卷积操作不同),过程如下图。
|
池化操作与卷积操作不同,过程如下图。
|
||||||
|
|
||||||

|

|
||||||
|
池化操作过程如图所示,对固定区域的特征,使用某一个值来表示。最常见的池化操作有两种,分为平均池化mean pooling和最大池化max pooling
|
||||||
|
|
||||||

|
1、平均池化:计算图像区域的平均值作为该区域池化后的值。
|
||||||
|
|
||||||
我们定义池化窗口的大小为sizeX,即下图中红色正方形的边长,定义两个相邻池化窗口的水平位移/竖直位移为stride。一般池化由于每一池化窗口都是不重复的,所以sizeX=stride。
|
2、最大池化:选图像区域的最大值作为该区域池化后的值。
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
最常见的池化操作为平均池化mean pooling和最大池化max pooling:
|
|
||||||
* 平均池化:计算图像区域的平均值作为该区域池化后的值。
|
|
||||||
* 最大池化:选图像区域的最大值作为该区域池化后的值。
|
|
||||||
|
|
||||||
|
上述的池化过程,相邻的池化窗口间没有重叠部分。
|
||||||
### 5.7.2 重叠池化(General Pooling)
|
### 5.7.2 重叠池化(General Pooling)
|
||||||
重叠池化正如其名字所说的,相邻池化窗口之间会有重叠区域,此时sizeX>stride。论文中,有作者使用了重叠池化,其他的设置都不变的情况下, top-1和top-5 的错误率分别减少了0.4% 和0.3%。
|
重叠池化即是一种相邻池化窗口之间会有重叠区域的池化技术。论文中[2]中,作者使用了重叠池化,其他的设置都不变的情况下,top-1和top-5 的错误率分别减少了0.4% 和0.3%。
|
||||||
|
### 5.7.3 空金字塔池化(Spatial Pyramid Pooling)
|
||||||
### 5.7.3 空间金字塔池化(Spatial Pyramid Pooling)
|
空间金字塔池化可以将任意尺度的图像卷积特征转化为相同维度,这不仅可以让CNN处理任意尺度的图像,还能避免cropping和warping操作,导致一些信息的丢失。一般的卷积神经网络都需要固定输入图像大小,这是因为全连接层的输入需要固定输入维度,但在卷积操作时并没有对图像大小有限制,所以作者提出了空间金字塔池化方法,先让图像进行卷积操作,然后使用SPP方法转化成维度相同的特征,最后输入到全连接层。
|
||||||
|
|
||||||
空间金字塔池化可以把任何尺度的图像的卷积特征转化成相同维度,这不仅可以让CNN处理任意尺度的图像,还能避免裁剪(cropping)和弯曲(warping)操作,导致一些信息的丢失,具有非常重要的意义。
|
|
||||||
|
|
||||||
一般的CNN都需要输入图像的大小是固定的,这是因为全连接层的输入需要固定输入维度,但在卷积操作是没有对图像尺度有限制,所以作者提出了空间金字塔池化,先让图像进行卷积操作,然后转化成维度相同的特征输入到全连接层,这个可以把CNN扩展到任意大小的图像。
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
空间金字塔池化的思想来自于Spatial Pyramid Model,它一个pooling变成了多个scale的pooling。用不同大小池化窗口作用于卷积特征,我们可以得到1*1,2*2,4*4的池化结果,由于conv5中共有256个过滤器,所以得到1个256维的特征,4个256个特征,以及16个256维的特征,然后把这21个256维特征连接起来输入全连接层,通过这种方式把不同大小的图像转化成相同维度的特征。
|
根据论文作者所述,空间金字塔池化的思想来自于Spatial Pyramid Model,它是将一个pooling过程变成了多个尺度的pooling。用不同大小的池化窗口作用于卷积特征,这样就可以得到1X1,2X2,4X4的池化结果,由于conv5中共有256个滤波器,所以得到1个256维的特征,4个256个特征,以及16个256维的特征,然后把这21个256维特征链接起来输入全连接层,通过这种方式把不同大小的图像转化成相同维度的特征。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
对于不同的图像要得到相同大小的pooling结果,就需要根据图像的大小动态的计算池化窗口的大小和步长。假设conv5输出的大小为a*a,需要得到n*n大小的池化结果,可以让窗口大小sizeX为[a/n],步长为[a/n]。下图以conv5输出的大小为13*13为例。
|
对于不同的图像,如果想要得到相同大小的pooling结果,就需要根据图像大小动态的计算池化窗口大小和步长。假设conv5输出的大小为a*a,需要得到n*n大小的池化结果,可以让窗口大小sizeX为[a/n],步长为[a/n]。下图展示了以conv5输出大小是13*13为例,spp算法的各层参数。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
疑问:如果conv5输出的大小为14*14,[pool1*1]的sizeX=stride=14,[pool2*2]的sizeX=stride=7,这些都没有问题,但是,[pool4*4]的sizeX=5,stride=4,最后一列和最后一行特征没有被池化操作计算在内。
|
总结来说,SPP方法其实就是一种使用多个尺度的池化方法,可以获取图像中的多尺度信息。在卷积神经网络中加入SPP后,可以让CNN处理任意大小的输入,这让模型变得更加的灵活。
|
||||||
|
|
||||||
SPP其实就是一种多个scale的pooling,可以获取图像中的多尺度信息;在CNN中加入SPP后,可以让CNN处理任意大小的输入,这让模型变得更加的flexible。
|
|
||||||
|
|
||||||
## 5.8 1x1卷积作用?
|
## 5.8 1x1卷积作用?
|
||||||
|
1×1的卷积主要有以下两个方面的作用:
|
||||||
|
|
||||||
1×1的卷积大概有两个方面的作用:
|
1. 实现信息的跨通道交互和整合。
|
||||||
1. 实现跨通道的交互和信息整合。
|
|
||||||
2. 进行卷积核通道数的降维和升维。
|
2. 对卷积核通道数进行降维和升维,减小参数量。
|
||||||
|
|
||||||
下面详细解释一下:
|
下面详细解释一下:
|
||||||
1. 1×1的卷积层(可能)引起人们的重视是在NIN(Network In Network)的结构中,论文中林敏师兄的想法是利用MLP(multilayer perceptron)代替传统的线性卷积核,从而提高网络的表达能力。文中同时利用了跨通道pooling的角度解释,认为文中提出的MLP其实等价于在传统卷积核后面接cccp层,从而实现多个feature map的线性组合,实现跨通道的信息整合。而cccp层是等价于1×1卷积的,因此细看NIN的caffe实现,就是在每个传统卷积层后面接了两个cccp层(其实就是接了两个1×1的卷积层)。
|
**第一点 实现信息的跨通道交互和整合**
|
||||||
|
对1×1卷积层的探讨最初是出现在NIN的结构,论文作者的动机是利用MLP代替传统的线性卷积核,从而提高网络的表达能力。文中从跨通道池化的角度进行解释,认为文中提出的MLP其实等价于在传统卷积核后面接cccp层,从而实现多个feature map的线性组合,实现跨通道的信息整合。而查看代码实现,cccp层即等价于1×1卷积层。
|
||||||
2. 进行降维和升维引起人们重视的(可能)是在GoogLeNet里。对于每一个Inception模块(如下图),原始模块是左图,右图中是加入了1×1卷积进行降维的。虽然左图的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大,而右图加入1×1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层得到的feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。而右图在pooling后面加了通道为32的1×1卷积,使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)。
|
**第二点 对卷积核通道数进行降维和升维,减小参数量**
|
||||||
|
1x1卷积层能带来降维和升维的效果,在一系列的GoogLeNet中体现的最明显。对于每一个Inception模块(如下图),左图是原始模块,右图是加入1×1卷积进行降维的模块。虽然左图的卷积核都比较小,但是当输入和输出的通道数很大时,卷积核的参数量也会变的很大,而右图加入1×1卷积后可以降低输入的通道数,因此卷积核参数、运算复杂度也就大幅度下降。以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层得到的feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。而右图在pooling后面加了通道数为32的1×1卷积,使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层AlexNet的十二分之一,当然其中也有丢掉全连接层的原因。
|
||||||
|
|
||||||

|

|
||||||
|
而非常经典的ResNet结构,同样也使用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图结构所示。
|
||||||
最近大热的MSRA的ResNet同样也利用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构。(不然真不敢想象152层的网络要怎么跑起来TAT)
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
@ -252,18 +192,18 @@ SPP其实就是一种多个scale的pooling,可以获取图像中的多尺度
|
||||||
|
|
||||||
3:上面说了下卷积和池化,再说下计算中需要注意到的。在代码中使用的是彩色图,彩色图有3个通道,那么对于每一个通道来说要单独进行卷积和池化,有一个地方尤其是进行卷积的时候要注意到,隐藏层的每一个值是对应到一幅图的3个通道穿起来的,所以分3个通道进行卷积之后要加起来,正好才能对应到一个隐藏层的神经元上,也就是一个feature上去。
|
3:上面说了下卷积和池化,再说下计算中需要注意到的。在代码中使用的是彩色图,彩色图有3个通道,那么对于每一个通道来说要单独进行卷积和池化,有一个地方尤其是进行卷积的时候要注意到,隐藏层的每一个值是对应到一幅图的3个通道穿起来的,所以分3个通道进行卷积之后要加起来,正好才能对应到一个隐藏层的神经元上,也就是一个feature上去。
|
||||||
|
|
||||||
## 5.10 卷积核一定越大越好?
|
## 5.10 卷积核是否一定越大越好?
|
||||||
|
首先,给出答案。不是。
|
||||||
|
在AlexNet网络结构中,用到了一些非常大的卷积核,比如11×11、5×5卷积核。之前研究者的想法是,卷积核越大,receptive field(感受野)越大,因此获得的特征越好。虽说如此,但是大的卷积核会导致计算量大幅增加,不利于训练更深层的模型,而相应的计算性能也会降低。于是在VGG、Inception网络中,实验发现利用2个3×3卷积核的组合比1个5×5卷积核的效果更佳,同时参数量(3×3×2+1 VS 5×5×1+1)会更少,因此后来3×3卷积核被广泛应用在各种模型中。
|
||||||
|
|
||||||
AlexNet中用到了一些非常大的卷积核,比如11×11、5×5卷积核,之前人们的观念是,卷积核越大,receptive field(感受野)越大,看到的图片信息越多,因此获得的特征越好。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低。于是在VGG(最早使用)、Inception网络中,利用2个3×3卷积核的组合比1个5×5卷积核的效果更佳,同时参数量(3×3×2+1 VS 5×5×1+1) 被降低,因此后来3×3卷积核被广泛应用在各种模型中。多个小的卷积核叠加使用要远比一个大的卷积核单独使用效果要好的多,在连通性不变的情况下,大大降低了参数个数和计算复杂度。当然,卷积核也不是越小越好,对于特别稀疏的数据比如下图所示,当使用比较小的卷积核的时候可能无法表示其特征,如果采用较大的卷积核则会导致复杂度极大的增加。总而言之,我们应该选择多个相对小的卷积核来进行卷积。
|
多个小卷积核的叠加使用远比一个大卷积核单独使用效果要好的多,在连通性不变的情况下,大大降低了参数量和计算复杂度。当然,卷积核也不是越小越好,对于特别稀疏的数据,当使用比较小的卷积核的时候可能无法表示其特征,如果采用较大的卷积核则会导致复杂度极大的增加。
|
||||||
|
|
||||||
## 5.11 每层卷积只能用一种尺寸的卷积核?
|
总而言之,我们多倾向于选择多个相对小的卷积核来进行卷积。
|
||||||
|
|
||||||
传统的层叠式网络,基本上都是一个个卷积层的堆叠,每层只用一个尺寸的卷积核,例如VGG结构中使用了大量的3×3卷积层。事实上,同一层feature map可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好,谷歌的GoogLeNet,或者说Inception系列的网络,就使用了多个卷积核的结构:
|
|
||||||
|
|
||||||
|
## 5.11 每层卷积是否只能用一种尺寸的卷积核?
|
||||||
|
经典的神经网络,都属于层叠式网络,并且每层仅用一个尺寸的卷积核,例如VGG结构中使用了大量的3×3卷积层。事实上,同一层feature map可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好,例如GoogLeNet、Inception系列的网络,均是每层使用了多个卷积核结构。如下图所示,输入的feature map在同一层,分别经过1×1、3×3、5×5三种不同尺寸的卷积核,再将分别得到的特征进行组合。
|
||||||

|

|
||||||
|
|
||||||
如上图所示,一个输入的feature map 分别同时经过1×1、3×3、5×5的卷积核的处理,得出的特征再组合起来,获得更佳的特征。
|
|
||||||
|
|
||||||
## 5.12 怎样才能减少卷积层参数量?
|
## 5.12 怎样才能减少卷积层参数量?
|
||||||
|
|
||||||
发明GoogleNet的团队发现,如果仅仅引入多个尺寸的卷积核,会带来大量的额外的参数,受到Network In Network中1×1卷积核的启发,为了解决这个问题,他们往Inception结构中加入了一些1×1的卷积核,如图所示:
|
发明GoogleNet的团队发现,如果仅仅引入多个尺寸的卷积核,会带来大量的额外的参数,受到Network In Network中1×1卷积核的启发,为了解决这个问题,他们往Inception结构中加入了一些1×1的卷积核,如图所示:
|
||||||
|
|
@ -280,22 +220,14 @@ AlexNet中用到了一些非常大的卷积核,比如11×11、5×5卷积核,
|
||||||
|
|
||||||
1×1卷积核也被认为是影响深远的操作,往后大型的网络为了降低参数量都会应用上1×1卷积核。
|
1×1卷积核也被认为是影响深远的操作,往后大型的网络为了降低参数量都会应用上1×1卷积核。
|
||||||
|
|
||||||
## 5.13 卷积操作时必须同时考虑通道和区域吗?
|
## 5.13 在进行卷积操作时,必须同时考虑通道和区域吗?
|
||||||
|
|
||||||

|

|
||||||
|
标准的卷积过程可以看上图,一个2×2的卷积核在卷积时,对应图像区域中的所有通道均被同时考虑,那么问题来了,为什么一定要同时考虑图像区域和通道呢?能不能将通道和空间区域分开考虑?
|
||||||
标准的卷积过程可以看上图,一个2×2的卷积核在卷积时,对应图像区域中的所有通道均被同时考虑,问题在于,为什么一定要同时考虑图像区域和通道?我们为什么不能把通道和空间区域分开考虑?
|
|
||||||
|
|
||||||

|

|
||||||
|
Xception网络由此诞生。我们首先对每一个通道进行各自的卷积操作,有多少个通道就有多少个过滤器。得到新的通道feature maps之后,这时再对这批新的通道feature maps进行标准的1×1跨通道卷积操作。这种操作被称为 “DepthWise convolution”,称为深度可分离卷积。在imagenet 1000类分类任务中取得了非常鲁棒的效果,同时也减少了大量的参数。我们可以通过一个例子来算一算,使用深度可分离卷积,能d假设输入通道数为3,要求输出通道数为256。
|
||||||
Xception网络就是基于以上的问题发明而来。我们首先对每一个通道进行各自的卷积操作,有多少个通道就有多少个过滤器。得到新的通道feature maps之后,这时再对这批新的通道feature maps进行标准的1×1跨通道卷积操作。这种操作被称为 “DepthWise convolution” ,缩写“DW”。
|
1. 使用标准的卷积操作,使用3×3×256的卷积核,参数量为:3×3×3×256 = 6,912
|
||||||
|
2. 使用深度可分离的结构,分两步完成。参数量为:3×3×3 + 3×1×1×256 = 795。
|
||||||
这种操作是相当有效的,在imagenet 1000类分类任务中已经超过了InceptionV3的表现,而且也同时减少了大量的参数,我们来算一算,假设输入通道数为3,要求输出通道数为256,两种做法:
|
参数量仅为标准卷积的九分之一! 因此,使用depthwise操作比标准的卷积操作,在降低不少参数量的同时,得到了更好的分类效果。
|
||||||
|
|
||||||
1. 直接接一个3×3×256的卷积核,参数量为:3×3×3×256 = 6,912
|
|
||||||
2. DW操作,分两步完成,参数量为:3×3×3 + 3×1×1×256 = 795,又把参数量降低到九分之一!
|
|
||||||
|
|
||||||
因此,一个depthwise操作比标准的卷积操作降低不少的参数量,同时论文中指出这个模型得到了更好的分类效果。
|
|
||||||
|
|
||||||
## 5.14 采用宽卷积的好处有什么?
|
## 5.14 采用宽卷积的好处有什么?
|
||||||
|
|
||||||
|
|
@ -309,9 +241,10 @@ Xception网络就是基于以上的问题发明而来。我们首先对每一个
|
||||||
|
|
||||||
通过将输入边角的值纳入到滑窗中心进行计算,以便损失更少的信息。
|
通过将输入边角的值纳入到滑窗中心进行计算,以便损失更少的信息。
|
||||||
|
|
||||||
## 5.15 卷积层输出的深度与哪个部件的个数相同?
|
## 5.15 在卷积操作后,输出特征图(图像)大小如何计算?
|
||||||
|
在进行卷积操作时,往往根据需要,我们需设定一些参数。常见的参数有卷积核大小k, 窗口滑动的步长s, 进行填充的像素p, 假设输入特征图大小为Iw*Iw。则由以下公式可计算出输出特征图的大小Ow。
|
||||||
|
|
||||||
输出深度(通道)与卷积核(过滤器)的个数相等。
|
O_w = \frac{(I_w - k + 2p))}{s} + 1
|
||||||
|
|
||||||
## 5.16 如何得到卷积层输出的深度?
|
## 5.16 如何得到卷积层输出的深度?
|
||||||
|
|
||||||
|
|
@ -535,42 +468,35 @@ CNN的训练主要是在卷积层和子采样层的交互上,其主要的计
|
||||||
|
|
||||||
对于第三个问题,实际上有些人以为Matlab中对sigmoid函数进行inline的定义会更快,其实不然,Matlab与C/C++等等语言不一样,Matlab的inline反而比普通的函数定义更费时间。所以,我们可以直接在代码中使用计算sigmoid函数及其导数的真实代码。
|
对于第三个问题,实际上有些人以为Matlab中对sigmoid函数进行inline的定义会更快,其实不然,Matlab与C/C++等等语言不一样,Matlab的inline反而比普通的函数定义更费时间。所以,我们可以直接在代码中使用计算sigmoid函数及其导数的真实代码。
|
||||||
|
|
||||||
## 5.24 CNN的参数经验设置
|
## 5.24 卷积神经网络的经验参数设置
|
||||||
|
对于卷积神经网络的参数设置,没有很明确的指导原则,以下仅是一些经验集合。
|
||||||
|
|
||||||
对于卷积神经网络的参数设置,没有很明确的方法,这只是众多学者的一些经验。
|
1、learning-rate 学习率:学习率越小,模型收敛花费的时间就越长,但是可以逐步稳健的提高模型精确度。一般初始设置为0.1,然后每次除以0.2或者0.5来改进,得到最终值;
|
||||||
|
|
||||||
1、learning-rate 学习速率:学习速率越小,模型收敛花费的时间就越长,但是可以提高模型精确度。一般初始设置为0.1,然后每次除以0.2或者0.5来改进,得到最终值;
|
2、batch-size 样本批次容量:影响模型的优化程度和收敛速度,需要参考你的数据集大小来设置,具体问题具体分析,一般使用32或64,在计算资源允许的情况下,可以使用大batch进行训练。有论文提出,大batch可以加速训练速度,并取得更鲁棒的结果;
|
||||||
|
|
||||||
2、batch-size 样本批次容量:影响模型的优化程度和收敛速度,需要参考你的数据集大小来设置,具体问题具体分析;
|
3、weight-decay 权重衰减:用来在反向传播中更新权重和偏置,一般设置为0.005或0.001;
|
||||||
|
|
||||||
3、weight-decay 权重衰减:用来在反向传播中更新权重和偏置,一般设置为0.005;
|
4、epoch-number 训练次数:包括所有训练样本的一个正向传递和一个反向传递,训练至模型收敛即可;(注:和迭代次数iteration不一样)
|
||||||
|
总之,不是训练的次数越多,测试精度就会越高。会有各种原因导致过拟合,比如一种可能是预训练的模型太复杂,而使用的数据集样本数量太少,种类太单一。
|
||||||
4、epoch-number 训练次数:包括所有训练样本的一个正向传递和一个反向传递,训练至模型收敛即可;(注:和迭代周期iteration不一样)
|
|
||||||
|
|
||||||
而且,也不是说训练的次数越多,测试精度就会越高,可能会因为预训练的模型太复杂,而我的数据集样本数量太少,种类太单一,而出现过拟合。
|
|
||||||
|
|
||||||
## 5.25 提高泛化能力的方法总结
|
|
||||||
|
|
||||||
http://blog.csdn.net/u010900574/article/details/51992156
|
|
||||||
|
|
||||||
### 5.25.1 主要方法
|
|
||||||
|
|
||||||
|
## 5.25 提高泛化能力的方法总结(代码示例)
|
||||||
|
本节主要以代码示例来说明可以提高网络泛化能力的方法。
|
||||||
|
代码实验是基于mnist数据集,mnist是一个从0到9的手写数字集合,共有60000张训练图片,10000张测试图片。每张图片大小是28*28大小。目的就是通过各种手段,来构建一个高精度的分类神经网络。
|
||||||
|
### 5.25.1 手段
|
||||||
一般来说,提高泛化能力的方法主要有以下几个:
|
一般来说,提高泛化能力的方法主要有以下几个:
|
||||||
> * 正则化
|
> * 使用正则化技术
|
||||||
> * 增加神经网络层数
|
> * 增加神经网络层数
|
||||||
> * 使用正确的代价函数
|
> * 使用恰当的代价函数
|
||||||
> * 使用好的权重初始化技术
|
> * 使用权重初始化技术
|
||||||
> * 人为拓展训练集
|
> * 人为增广训练集
|
||||||
> * 弃权技术
|
> * 使用dropout技术
|
||||||
|
|
||||||
### 5.25.2 主要方法
|
### 5.25.2 主要方法
|
||||||
|
下面我们通过实验结果来判断每种手段的效果。
|
||||||
|
|
||||||
下面我们通过实验结果给这些参数优化理论一个直观的结果
|
(1)普通的全连接神经网络
|
||||||
|
网络结构使用一个隐藏层,其中包含100个隐藏神经元,输入层是784,输出层是one-hot编码的形式,最后一层是Softmax层。损失函数采用对数似然代价函数,60次迭代,学习速率η=0.1,随机梯度下降的小批量数据(mini-SGD)大小为10,没使用正则化。在测试集上得到的结果是97.8%,代码如下:
|
||||||
(1)普通的全连接神经网络的效果
|
|
||||||
|
|
||||||
我们使用一个隐藏层,包含100个隐藏神经元,输入层是784,输出层是one-hot编码的形式,最后一层是Softmax层。训练过程采用对数似然代价函数,60次迭代,学习速率η=0.1,随机梯度下降的小批量数据大小为10,没有正则化。在测试集上得到的结果是97.8%,代码如下:
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
>>> import network3
|
>>> import network3
|
||||||
>>> from network3 import Network
|
>>> from network3 import Network
|
||||||
|
|
@ -581,15 +507,10 @@ http://blog.csdn.net/u010900574/article/details/51992156
|
||||||
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
|
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
|
||||||
>>> net.SGD(training_data, 60, mini_batch_size, 0.1, validation_data, test_data)
|
>>> net.SGD(training_data, 60, mini_batch_size, 0.1, validation_data, test_data)
|
||||||
```
|
```
|
||||||
|
|
||||||
(2)使用卷积神经网络 — 仅一个卷积层
|
(2)使用卷积神经网络 — 仅一个卷积层
|
||||||
|
输入层是卷积层,卷积核大小是5*5,一共20个特征映射。最大池化层的大小为2*2。后面接一层100个隐藏神经元的全连接层。结构如图所示
|
||||||
输入层是卷积层,5*5的局部感受野,也就是一个5*5的卷积核,一共20个特征映射。最大池化层选用2*2的大小。后面是100个隐藏神经元的全连接层。结构如图所示
|
|
||||||
|
|
||||||

|

|
||||||
|
在这个结构中,我们把卷积层和池化层看做是训练图像的特征提取,而后的全连接层则是一个更抽象层次的特征提取,整合全局信息。同样设定是60次迭代,批量数据大小是10,学习率是0.1.代码如下,
|
||||||
在这个架构中,我们把卷积层和chihua层看做是学习输入训练图像中的局部感受野,而后的全连接层则是一个更抽象层次的学习,从整个图像整合全局信息。也是60次迭代,批量数据大小是10,学习率是0.1.代码如下。
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
>>> net = Network([
|
>>> net = Network([
|
||||||
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
|
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
|
||||||
|
|
@ -600,13 +521,10 @@ http://blog.csdn.net/u010900574/article/details/51992156
|
||||||
>>> net.SGD(training_data, 60, mini_batch_size, 0.1,
|
>>> net.SGD(training_data, 60, mini_batch_size, 0.1,
|
||||||
validation_data, test_data)
|
validation_data, test_data)
|
||||||
```
|
```
|
||||||
|
经过三次运行取平均后,准确率是98.78%,提高得较多。错误率降低了1/3。
|
||||||
经过三次运行取平均后,准确率是98.78%,这是相当大的改善。错误率降低了1/3,。卷积神经网络开始显现威力。
|
|
||||||
|
|
||||||
(3)使用卷积神经网络 — 两个卷积层
|
(3)使用卷积神经网络 — 两个卷积层
|
||||||
|
我们接着插入第二个卷积层,把它插入在之前结构的池化层和全连接层之间,同样是使用5*5的局部感受野,2*2的池化层。
|
||||||
我们接着插入第二个卷积-混合层,把它插入在之前的卷积-混合层和全连接层之间,同样的5*5的局部感受野,2*2的池化层。
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
>>> net = Network([
|
>>> net = Network([
|
||||||
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
|
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
|
||||||
|
|
@ -619,13 +537,10 @@ http://blog.csdn.net/u010900574/article/details/51992156
|
||||||
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
|
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
|
||||||
>>> net.SGD(training_data, 60, mini_batch_size, 0.1, validation_data, test_data)
|
>>> net.SGD(training_data, 60, mini_batch_size, 0.1, validation_data, test_data)
|
||||||
```
|
```
|
||||||
|
这一次,准确率达到了99.06%。
|
||||||
这一次,我们拥有了99.06%的准确率。
|
|
||||||
|
|
||||||
(4)使用卷积神经网络 — 两个卷积层+线性修正单元(ReLU)+正则化
|
(4)使用卷积神经网络 — 两个卷积层+线性修正单元(ReLU)+正则化
|
||||||
|
上面的网络结构,我们使用的是Sigmod激活函数,现在我们换成线性修正激活函数ReLU ,同样设定参数为60次迭代,学习速率η=0.03,使用L2正则化,正则化参数λ=0.1,代码如下:
|
||||||
上面我们使用的Sigmod激活函数,现在我们换成线性修正激活函数ReLU ,f(z)=max(0,z)f(z)=max(0,z),我们选择60个迭代期,学习速率η=0.03,η=0.03, ,使用L2正则化,正则化参数λ=0.1λ=0.1,代码如下:
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
>>> from network3 import ReLU
|
>>> from network3 import ReLU
|
||||||
>>> net = Network([
|
>>> net = Network([
|
||||||
|
|
@ -642,13 +557,10 @@ http://blog.csdn.net/u010900574/article/details/51992156
|
||||||
>>> net.SGD(training_data, 60, mini_batch_size, 0.03,
|
>>> net.SGD(training_data, 60, mini_batch_size, 0.03,
|
||||||
validation_data, test_data, lmbda=0.1)
|
validation_data, test_data, lmbda=0.1)
|
||||||
```
|
```
|
||||||
|
这一次,准确率达到了99.23%,超过了使用sigmoid激活函数的99.06%. ReLU的优势是当取最大极限时,梯度不会饱和。
|
||||||
|
|
||||||
这一次,我们获得了99.23%的准确率,超过了S型激活函数的99.06%. ReLU的优势是max(0,z)max(0,z)中z取最大极限时不会饱和,不像是S函数,这有助于持续学习。
|
(5)卷积神经网络 —两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集
|
||||||
|
拓展训练集数据的一个简单方法是将每个训练图像由一个像素来代替,无论是上一个像素,下一个像素,或者左右的像素。其他的方法也有改变亮度,改变分辨率,图片旋转,扭曲,位移等。我们把50000幅图像人为拓展到250000幅图像。使用与第四小节一样的网络,因为我们训练时使用了5倍的数据,所以减少了过拟合的风险。
|
||||||
(5)使用卷积神经网络,即两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集
|
|
||||||
|
|
||||||
拓展训练集数据的一个简单方法是将每个训练图像由一个像素来代替,无论是上一个像素,下一个像素,或者左右的像素。其他的方法也有改变亮度,改变分辨率,图片旋转,扭曲,位移等。我们把50,000幅图像人为拓展到250,000幅图像。使用第4节一样的网络,因为我们是在训练5倍的数据,所以减少了过拟合的风险。
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
>>> expanded_training_data, _, _ = network3.load_data_shared(
|
>>> expanded_training_data, _, _ = network3.load_data_shared(
|
||||||
"../data/mnist_expanded.pkl.gz")
|
"../data/mnist_expanded.pkl.gz")
|
||||||
|
|
@ -666,12 +578,10 @@ http://blog.csdn.net/u010900574/article/details/51992156
|
||||||
>>> net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,
|
>>> net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,
|
||||||
validation_data, test_data, lmbda=0.1)
|
validation_data, test_data, lmbda=0.1)
|
||||||
```
|
```
|
||||||
|
这次得到了99.37的训练正确率。
|
||||||
|
|
||||||
这次的到了99.37的训练正确率。
|
(6)卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集+继续插入额外的全连接层
|
||||||
|
继续上面的网络,我们拓展全连接层的规模,使用300个隐藏神经元和1000个神经元的额精度分别是99.46%和99.43%.
|
||||||
(6)使用卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集+继续插入额外的全连接层
|
|
||||||
继续上面的网络,我们拓展全连接层的规模,300个隐藏神经元和1000个神经元的额精度分别是99.46%和99.43%. 我们插入一个额外的全连接层
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
>>> net = Network([
|
>>> net = Network([
|
||||||
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
|
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
|
||||||
|
|
@ -688,13 +598,10 @@ http://blog.csdn.net/u010900574/article/details/51992156
|
||||||
>>> net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,
|
>>> net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,
|
||||||
validation_data, test_data, lmbda=0.1)
|
validation_data, test_data, lmbda=0.1)
|
||||||
```
|
```
|
||||||
|
|
||||||
这次取得了99.43%的精度。拓展后的网络并没有帮助太多。
|
这次取得了99.43%的精度。拓展后的网络并没有帮助太多。
|
||||||
|
|
||||||
(7)使用卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+拓展数据集+继续插入额外的全连接层+弃权技术
|
(7)卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+拓展数据集+继续插入额外的全连接层+dropout技术
|
||||||
|
dropout的基本思想就是在训练网络时随机的移除单独的激活值,使得模型更稀疏,不太依赖于训练数据的特质。我们尝试应用dropout到最终的全连接层(而不是在卷积层)。由于训练时间,将迭代次数设置为40,全连接层使用1000个隐藏神经元,因为dropout会丢弃一些神经元。Dropout是一种非常有效且能提高泛化能力,降低过拟合的方法!
|
||||||
弃权的基本思想就是在训练网络时随机地移除单独的激活值,使得模型对单独的依据丢失更为强劲,因此不太依赖于训练数据的特质。我们尝试应用弃权技术到最终的全连接层(不是在卷积层)。这里,减少了迭代期的数量为40个,全连接层使用1000个隐藏神经元,因为弃权技术会丢弃一些神经元。Dropout是一种非常有效有提高泛化能力,降低过拟合的方法!
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
>>> net = Network([
|
>>> net = Network([
|
||||||
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
|
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
|
||||||
|
|
@ -714,14 +621,11 @@ http://blog.csdn.net/u010900574/article/details/51992156
|
||||||
>>> net.SGD(expanded_training_data, 40, mini_batch_size, 0.03,
|
>>> net.SGD(expanded_training_data, 40, mini_batch_size, 0.03,
|
||||||
validation_data, test_data)
|
validation_data, test_data)
|
||||||
```
|
```
|
||||||
|
使用dropout,得到了99.60%的准确率。
|
||||||
|
|
||||||
使用弃权技术,得到了99.60%的准确率。
|
(8)卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集+继续插入额外的全连接层+弃权技术+组合网络
|
||||||
|
|
||||||
(8)使用卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集+继续插入额外的全连接层+弃权技术+组合网络
|
|
||||||
|
|
||||||
组合网络类似于随机森林或者adaboost的集成方法,创建几个神经网络,让他们投票来决定最好的分类。我们训练了5个不同的神经网络,每个都大到了99.60%的准去率,用这5个网络来进行投票表决一个图像的分类。
|
组合网络类似于随机森林或者adaboost的集成方法,创建几个神经网络,让他们投票来决定最好的分类。我们训练了5个不同的神经网络,每个都大到了99.60%的准去率,用这5个网络来进行投票表决一个图像的分类。
|
||||||
|
采用这种集成方法,精度又得到了微小的提升,达到了99.67%。
|
||||||
采用这个方法,达到了99.67%的准确率。
|
|
||||||
|
|
||||||
## 5.26 CNN在CV与NLP领域运用的联系与区别?
|
## 5.26 CNN在CV与NLP领域运用的联系与区别?
|
||||||
|
|
||||||
|
|
@ -737,32 +641,24 @@ http://blog.csdn.net/u010900574/article/details/51992156
|
||||||
1. 区域不变性:滤波器在每层的输入向量(图像)上滑动,检测的是局部信息,然后通过pooling取最大值或均值。pooling这步综合了局部特征,失去了每个特征的位置信息。这很适合基于图像的任务,比如要判断一幅图里有没有猫这种生物,你可能不会去关心这只猫出现在图像的哪个区域。但是在NLP里,词语在句子或是段落里出现的位置,顺序,都是很重要的信息。
|
1. 区域不变性:滤波器在每层的输入向量(图像)上滑动,检测的是局部信息,然后通过pooling取最大值或均值。pooling这步综合了局部特征,失去了每个特征的位置信息。这很适合基于图像的任务,比如要判断一幅图里有没有猫这种生物,你可能不会去关心这只猫出现在图像的哪个区域。但是在NLP里,词语在句子或是段落里出现的位置,顺序,都是很重要的信息。
|
||||||
2. 局部组合性:CNN中,每个滤波器都把较低层的局部特征组合生成较高层的更全局化的特征。这在CV里很好理解,像素组合成边缘,边缘生成形状,最后把各种形状组合起来得到复杂的物体表达。在语言里,当然也有类似的组合关系,但是远不如图像来的直接。而且在图像里,相邻像素必须是相关的,相邻的词语却未必相关。
|
2. 局部组合性:CNN中,每个滤波器都把较低层的局部特征组合生成较高层的更全局化的特征。这在CV里很好理解,像素组合成边缘,边缘生成形状,最后把各种形状组合起来得到复杂的物体表达。在语言里,当然也有类似的组合关系,但是远不如图像来的直接。而且在图像里,相邻像素必须是相关的,相邻的词语却未必相关。
|
||||||
|
|
||||||
## 5.27 CNN凸显共性的手段?
|
## 5.27 卷积神经网络凸显共性的方法?
|
||||||
|
|
||||||
### 5.27.1 局部连接
|
### 5.27.1 局部连接
|
||||||
|
我们首先了解一个概念,感受野,即每个神经元仅与输入神经元相连接的一块区域。
|
||||||
感受视野:每个神经元仅与输入神经元的一块区域连接,这块局部区域称作感受野(receptive field)。
|
在图像卷积操作中,神经元在空间维度上是局部连接,但在深度上是全连接。局部连接的思想,是受启发于生物学里的视觉系统结构,视觉皮层的神经元就是仅用局部接受信息。对于二维图像,局部像素关联性较强。这种局部连接保证了训练后的滤波器能够对局部特征有最强的响应,使神经网络可以提取数据的局部特征;
|
||||||
在图像卷积操作中,即神经元在空间维度是局部连接,但在深度上是全部连接。对于二维图像本身而言,也是局部像素关联较强。这种局部连接保证了学习后的过滤器能够对于局部的输入特征有最强的响应。局部连接的思想,也是受启发于生物学里面的视觉系统结构,视觉皮层的神经元就是局部接受信息的。
|
|
||||||
|
|
||||||
局部连接使网络可以提取数据的局部特征;
|
|
||||||
|
|
||||||
下图是一个很经典的图示,左边是全连接,右边是局部连接。
|
下图是一个很经典的图示,左边是全连接,右边是局部连接。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
对于一个1000 × 1000的输入图像而言,如果下一个隐藏层的神经元数目为10^6个,采用全连接则有1000 × 1000 × 10^6 = 10^12个权值参数,如此数目巨大的参数几乎难以训练;而采用局部连接,隐藏层的每个神经元仅与图像中10 × 10的局部图像相连接,那么此时的权值参数数量为10 × 10 × 10^6 = 10^8,将直接减少4个数量级。
|
对于一个1000 × 1000的输入图像而言,如果下一个隐藏层的神经元数目为10^6个,采用全连接则有1000 × 1000 × 10^6 = 10^12个权值参数,如此巨大的参数量几乎难以训练;而采用局部连接,隐藏层的每个神经元仅与图像中10 × 10的局部图像相连接,那么此时的权值参数数量为10 × 10 × 10^6 = 10^8,将直接减少4个数量级。
|
||||||
|
|
||||||
### 5.27.2 权值共享
|
### 5.27.2 权值共享
|
||||||
|
权值共享,即计算同一深度的神经元时采用的卷积核参数是共享的。权值共享在一定程度上讲是有意义的,是由于在神经网络中,提取的底层边缘特征与其在图中的位置无关。但是在另一些场景中是无意的,如在人脸识别任务,我们期望在不同的位置学到不同的特征。
|
||||||
权重共享:计算同一个深度切片的神经元时采用的滤波器是共享的。例如图4中计算o[:,:,0]的每个每个神经元的滤波器均相同,都为W0,这样可以很大程度上减少参数。共享权重在一定程度上讲是有意义的,例如图片的底层边缘特征与特征在图中的具体位置无关。但是在一些场景中是无意的,比如输入的图片是人脸,眼睛和头发位于不同的位置,希望在不同的位置学到不同的特征 (参考斯坦福大学公开课)。请注意权重只是对于同一深度切片的神经元是共享的,在卷积层,通常采用多组卷积核提取不同特征,即对应不同深度切片的特征,不同深度切片的神经元权重是不共享。另外,偏重对同一深度切片的所有神经元都是共享的。
|
需要注意的是,权重只是对于同一深度切片的神经元是共享的。在卷积层中,通常采用多组卷积核提取不同的特征,即对应的是不同深度切片的特征,而不同深度切片的神经元权重是不共享。相反,偏置这一权值对于同一深度切片的所有神经元都是共享的。
|
||||||
|
权值共享带来的好处是大大降低了网络的训练难度。如下图,假设在局部连接中隐藏层的每一个神经元连接的是一个10 × 10的局部图像,因此有10 × 10个权值参数,将这10 × 10个权值参数共享给剩下的神经元,也就是说隐藏层中10^6个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10 × 10个权值参数(也就是卷积核的大小)。
|
||||||
权值共享大大降低了网络的训练难度,一个Filter只提取一个特征,在整个图片(或者语音/文本) 中进行卷积
|
|
||||||
|
|
||||||
尽管减少了几个数量级,但参数数量依然较多。能不能再进一步减少呢?能!方法就是权值共享。具体做法是,在局部连接中隐藏层的每一个神经元连接的是一个10 × 10的局部图像,因此有10 × 10个权值参数,将这10 × 10个权值参数共享给剩下的神经元,也就是说隐藏层中10^6个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10 × 10个权值参数(也就是卷积核(也称滤波器)的大小),如下图。
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
这大概就是CNN的一个神奇之处,尽管只有这么少的参数,依旧有出色的性能。但是,这样仅提取了图像的一种特征,如果要多提取出一些特征,可以增加多个卷积核,不同的卷积核能够得到图像的不同映射下的特征,称之为Feature Map。如果有100个卷积核,最终的权值参数也仅为100 × 100 = 10^4个而已。另外,偏置参数也是共享的,同一种滤波器共享一个。
|
这里就体现了卷积神经网络的奇妙之处,使用少量的参数,却依然能有非常出色的性能。上述仅仅是提取图像一种特征的过程。如果要多提取出一些特征,可以增加多个卷积核,不同的卷积核能够得到图像不同尺度下的特征,称之为特征图(feature map)。
|
||||||
|
|
||||||
### 5.27.3 池化操作
|
### 5.27.3 池化操作
|
||||||
|
|
||||||
|
|
@ -770,34 +666,40 @@ http://blog.csdn.net/u010900574/article/details/51992156
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 5.28 全卷积与Local-Conv的异同点
|
## 5.28 全卷积与Local-Conv的异同点
|
||||||
|
|
||||||
如果每一个点的处理使用相同的Filter,则为全卷积,如果使用不同的Filter,则为Local-Conv。
|
如果每一个点的处理使用相同的Filter,则为全卷积,如果使用不同的Filter,则为Local-Conv。
|
||||||
|
|
||||||
### 5.29 举例理解Local-Conv的作用
|
## 5.29 举例理解Local-Conv的作用
|
||||||
|
并不是所有的卷积都会进行权重共享,在某些特定任务中,会使用不权重共享的卷积。下面通过人脸这一任务来进行讲解。在读人脸方向的一些paper时,会发现很多都会在最后加入一个Local Connected Conv,也就是不进行权重共享的卷积层。总的来说,这一步的作用就是使用3D模型来将人脸对齐,从而使CNN发挥最大的效果。
|
||||||
这个问题主要针对:为什么很多做人脸的Paper会最后加入一个Local Connected Conv?总体上说,这一步的作用就是使用3D模型来将人脸对齐,从而使CNN发挥最大的效果。
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
经过3D对齐以后,形成的图像都是152×152的图像,输入到上述网络结构中,该结构的参数如下:
|
截取论文中的一部分图,经过3D对齐以后,形成的图像均是152×152,输入到上述的网络结构中。该结构的参数如下:
|
||||||
|
|
||||||
* Conv:32个11×11×3的卷积核max-pooling: 3×3, stride=2Conv: 16个9×9的卷积核。
|
Conv:32个11×11×3的卷积核
|
||||||
* Local-Conv: 16个9×9的卷积核,Local的意思是卷积核的参数不共享。
|
|
||||||
* Local-Conv: 16个7×7的卷积核,参数不共享Local-Conv: 16个5×5的卷积核,参数不共享
|
|
||||||
* Fully-connected: 4096维Softmax: 4030维。
|
|
||||||
|
|
||||||
前三层的目的在于提取低层次的特征,比如简单的边和纹理。其中Max-pooling层使得卷积的输出对微小的偏移情况更加鲁棒。但没有用太多的Max-pooling层,因为太多的Max-pooling层会使得网络损失图像信息。
|
max-pooling: 3×3,stride=2,
|
||||||
|
|
||||||
后面三层都是使用参数不共享的卷积核,之所以使用参数不共享,有如下原因:
|
Conv: 16个9×9的卷积核,
|
||||||
|
|
||||||
(1)对齐的人脸图片中,不同的区域会有不同的统计特征,卷积的局部稳定性假设并不存在,所以使用相同的卷积核会导致信息的丢失
|
Local-Conv: 16个9×9的卷积核,
|
||||||
(2)不共享的卷积核并不增加抽取特征时的计算量,而会增加训练时的计算量
|
|
||||||
(3)使用不共享的卷积核,需要训练的参数量大大增加,因而需要很大的数据量,然而这个条件本文刚好满足。
|
|
||||||
|
|
||||||
全连接层将上一层的每个单元和本层的所有单元相连,用来捕捉人脸图像不同位置的特征之间的相关性。其中,第7层(4096-d)被用来表示人脸。
|
Local-Conv: 16个7×7的卷积核,
|
||||||
|
|
||||||
|
Local-Conv: 16个5×5的卷积核,
|
||||||
|
|
||||||
|
Fully-connected: 4096维
|
||||||
|
|
||||||
|
Softmax: 4030维。
|
||||||
|
|
||||||
|
前三层的目的在于提取低层次的特征,比如简单的边和纹理。其中Max-pooling层使得卷积的输出对微小的偏移情况更加鲁棒。但不能使用更多的Max-pooling层,因为太多的Max-pooling层会使得网络损失图像信息。全连接层将上一层的每个单元和本层的所有单元相连,用来捕捉人脸图像不同位置特征之间的相关性。最后使用softmax层用于人脸分类。
|
||||||
|
中间三层都是使用参数不共享的卷积核,之所以使用参数不共享,有如下原因:
|
||||||
|
|
||||||
|
(1)对齐的人脸图片中,不同的区域会有不同的统计特征,因此并不存在特征的局部稳定性,所以使用相同的卷积核会导致信息的丢失。
|
||||||
|
|
||||||
|
(2)不共享的卷积核并不增加inference时特征的计算量,仅会增加训练时的计算量。
|
||||||
|
使用不共享的卷积核,由于需要训练的参数量大大增加,因此往往需要通过其他方法增加数据量。
|
||||||
|
|
||||||
全连接层的输出可以用于Softmax的输入,Softmax层用于分类。
|
|
||||||
|
|
||||||
## 5.30 简述卷积神经网络进化史
|
## 5.30 简述卷积神经网络进化史
|
||||||
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
[TOC]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 第六章 循环神经网络(RNN)
|
# 第六章 循环神经网络(RNN)
|
||||||
|
|
||||||
Markdown Revision 2;
|
Markdown Revision 2;
|
||||||
|
|
@ -10,8 +14,74 @@
|
||||||
Editor: 杨国峰-中国农业科学院
|
Editor: 杨国峰-中国农业科学院
|
||||||
Contact: tectalll@gmail.com
|
Contact: tectalll@gmail.com
|
||||||
|
|
||||||
|
新增 https://blog.csdn.net/zhaojc1995/article/details/80572098
|
||||||
|
RNN发展简述?
|
||||||
|
为什么需要RNN?
|
||||||
|
RNN的结构及变体
|
||||||
|
标准RNN的前向输出流程?
|
||||||
|
RNN的训练方法——BPTT?
|
||||||
|
什么是长期依赖(Long-Term Dependencies)问题?
|
||||||
|
LSTM 网络是什么?
|
||||||
|
LSTM 的核心思想?
|
||||||
|
如何逐步理解LSTM?
|
||||||
|
常见的RNNs扩展和改进模型
|
||||||
|
RNN种类?
|
||||||
|
讲解CNN+RNN的各种组合方式 http://www.elecfans.com/d/775895.html
|
||||||
|
## CNN和RNN的对比 http://www.elecfans.com/d/775895.html
|
||||||
|
1、CNN卷积神经网络与RNN递归神经网络直观图
|
||||||
|
2、相同点:
|
||||||
|
2.1. 传统神经网络的扩展。
|
||||||
|
2.2. 前向计算产生结果,反向计算模型更新。
|
||||||
|
2.3. 每层神经网络横向可以多个神经元共存,纵向可以有多层神经网络连接。
|
||||||
|
3、不同点
|
||||||
|
3.1. CNN空间扩展,神经元与特征卷积;RNN时间扩展,神经元与多个时间输出计算
|
||||||
|
3.2. RNN可以用于描述时间上连续状态的输出,有记忆功能,CNN用于静态输出
|
||||||
|
3. 3. CNN高级100+深度,RNN深度有限
|
||||||
|
|
||||||
|
|
||||||
http://blog.csdn.net/heyongluoyao8/article/details/48636251
|
http://blog.csdn.net/heyongluoyao8/article/details/48636251
|
||||||
|
|
||||||
|
## 6.1 为什么需要RNN?
|
||||||
|
http://ai.51cto.com/art/201711/559441.htm
|
||||||
|
神经网络可以当做是能够拟合任意函数的黑盒子,只要训练数据足够,给定特定的x,就能得到希望的y,结构图如下:
|
||||||
|
将神经网络模型训练好之后,在输入层给定一个x,通过网络之后就能够在输出层得到特定的y,那么既然有了这么强大的模型,为什么还需要RNN(循环神经网络)呢?
|
||||||
|
他们都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。
|
||||||
|
|
||||||
|
比如,当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列; 当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列。
|
||||||
|
|
||||||
|
以nlp的一个最简单词性标注任务来说,将我 吃 苹果 三个单词标注词性为 我/nn 吃/v 苹果/nn。
|
||||||
|
|
||||||
|
那么这个任务的输入就是:
|
||||||
|
|
||||||
|
我 吃 苹果 (已经分词好的句子)
|
||||||
|
|
||||||
|
这个任务的输出是:
|
||||||
|
|
||||||
|
我/nn 吃/v 苹果/nn(词性标注好的句子)
|
||||||
|
|
||||||
|
对于这个任务来说,我们当然可以直接用普通的神经网络来做,给网络的训练数据格式了就是我-> 我/nn 这样的多个单独的单词->词性标注好的单词。
|
||||||
|
|
||||||
|
但是很明显,一个句子中,前一个单词其实对于当前单词的词性预测是有很大影响的,比如预测苹果的时候,由于前面的吃是一个动词,那么很显然苹果作为名词的概率就会远大于动词的概率,因为动词后面接名词很常见,而动词后面接动词很少见。
|
||||||
|
|
||||||
|
所以为了解决一些这样类似的问题,能够更好的处理序列的信息,RNN就诞生了。
|
||||||
|
|
||||||
|
## 6.1 RNN种类?
|
||||||
|
https://www.cnblogs.com/rucwxb/p/8047401.html
|
||||||
|
1. sequence-to-sequence:输入输出都是一个序列。例如股票预测中的RNN,输入是前N天价格,输出明天的股市价格。
|
||||||
|
|
||||||
|
2. sequence-to-vector:输入是一个序列,输出单一向量。
|
||||||
|
|
||||||
|
3. vector-to-sequence:输入单一向量,输出一个序列。
|
||||||
|
|
||||||
|
4.Encoder-Decoder:输入sequence-to-vector,称作encoder,输出vector-to-sequence,称作decoder。
|
||||||
|
|
||||||
|
这是一个delay模型,经过一段延迟,即把所有输入都读取后,在decoder中获取输入并输出一个序列。这个模型在机器翻译中使用较广泛,源语言输在入放入encoder,浓缩在状态信息中,生成目标语言时,可以生成一个不长度的目标语言序列。
|
||||||
|
|
||||||
|
## RNN train的时候,Loss波动很大
|
||||||
|
https://www.jianshu.com/p/30b253561337
|
||||||
|
由于RNN特有的memory会影响后期其他的RNN的特点,梯度时大时小,learning rate没法个性化的调整,导致RNN在train的过程中,Loss是震荡起伏的……
|
||||||
|
为了解决RNN的这个问题,在train的时候,可以有个clipping的方式,当梯度大于某个临界值,直接截断,用这个临界值作为梯度的大小,防止飞出去…(居然还能这么操作,66666)
|
||||||
|
|
||||||
## 6.1 RNNs和FNNs有什么区别?
|
## 6.1 RNNs和FNNs有什么区别?
|
||||||
|
|
||||||
1. 不同于传统的前馈神经网络(FNNs),RNNs引入了定向循环,能够处理输入之间前后关联问题。
|
1. 不同于传统的前馈神经网络(FNNs),RNNs引入了定向循环,能够处理输入之间前后关联问题。
|
||||||
|
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
# 什么是生成对抗网络
|
|
||||||
## GAN的通俗化介绍
|
|
||||||
|
|
||||||
生成对抗网络(GAN, Generative adversarial network)自从2014年被Ian Goodfellow提出以来,掀起来了一股研究热潮。GAN由生成器和判别器组成,生成器负责生成样本,判别器负责判断生成器生成的样本是否为真。生成器要尽可能迷惑判别器,而判别器要尽可能区分生成器生成的样本和真实样本。
|
|
||||||
|
|
||||||
在GAN的原作[1]中,作者将生成器比喻为印假钞票的犯罪分子,判别器则类比为警察。犯罪分子努力让钞票看起来逼真,警察则不断提升对于假钞的辨识能力。二者互相博弈,随着时间的进行,都会越来越强。
|
|
||||||
|
|
||||||
# GAN的形式化表达
|
|
||||||
上述例子只是简要介绍了一下GAN的思想,下面对于GAN做一个形式化的,更加具体的定义。通常情况下,无论是生成器还是判别器,我们都可以用神经网络来实现。那么,我们可以把通俗化的定义用下面这个模型来表示:
|
|
||||||

|
|
||||||
|
|
||||||
上述模型左边是生成器G,其输入是$$z$$,对于原始的GAN,$$z$$是由高斯分布随机采样得到的噪声。噪声$$z$$通过生成器得到了生成的假样本。
|
|
||||||
|
|
||||||
生成的假样本与真实样本放到一起,被随机抽取送入到判别器D,由判别器去区分输入的样本是生成的假样本还是真实的样本。整个过程简单明了,生成对抗网络中的“生成对抗”主要体现在生成器和判别器之间的对抗。
|
|
||||||
|
|
||||||
# GAN的目标函数
|
|
||||||
对于上述神经网络模型,如果想要学习其参数,首先需要一个目标函数。GAN的目标函数定义如下:
|
|
||||||
|
|
||||||
$$\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) = {{\rm E}_{x\sim{p_{data}}(x)}}[\log D(x)] + {{\rm E}_{z\sim{p_z}(z)}}[\log (1 - D(G(z)))]$$
|
|
||||||
|
|
||||||
这个目标函数可以分为两个部分来理解:
|
|
||||||
|
|
||||||
判别器的优化通过$$\mathop {\max}\limits_D V(D,G)$$实现,$$V(D,G)$$为判别器的目标函数,其第一项$${{\rm E}_{x\sim{p_{data}}(x)}}[\log D(x)]$$表示对于从真实数据分布 中采用的样本 ,其被判别器判定为真实样本概率的数学期望。对于真实数据分布 中采样的样本,其预测为正样本的概率当然是越接近1越好。因此希望最大化这一项。第二项$${{\rm E}_{z\sim{p_z}(z)}}[\log (1 - D(G(z)))]$$表示:对于从噪声P_z(z)分布当中采样得到的样本经过生成器生成之后得到的生成图片,然后送入判别器,其预测概率的负对数的期望,这个值自然是越大越好,这个值越大, 越接近0,也就代表判别器越好。
|
|
||||||
|
|
||||||
生成器的优化通过$$\mathop {\min }\limits_G({\mathop {\max }\limits_D V(D,G)})$$实现。注意,生成器的目标不是$$\mathop {\min }\limits_GV(D,G)$$,即生成器**不是最小化判别器的目标函数**,生成器最小化的是**判别器目标函数的最大值**,判别器目标函数的最大值代表的是真实数据分布与生成数据分布的JS散度(详情可以参阅附录的推导),JS散度可以度量分布的相似性,两个分布越接近,JS散度越小。
|
|
||||||
|
|
||||||
|
|
||||||
# GAN的目标函数和交叉熵
|
|
||||||
判别器目标函数写成离散形式即为$$V(D,G)=-\frac{1}{m}\sum_{i=1}^{i=m}logD(x^i)-\frac{1}{m}\sum_{i=1}^{i=m}log(1-D(\tilde{x}^i))$$
|
|
||||||
可以看出,这个目标函数和交叉熵是一致的,即**判别器的目标是最小化交叉熵损失,生成器的目标是最小化生成数据分布和真实数据分布的JS散度**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-------------------
|
|
||||||
[1]: Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems. 2014.
|
|
||||||
[2]
|
|
||||||
|
After Width: | Height: | Size: 132 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 265 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 190 KiB |
|
After Width: | Height: | Size: 576 KiB |
|
After Width: | Height: | Size: 484 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 197 KiB |
|
|
@ -3,9 +3,8 @@
|
||||||
### 深度学习500问-第 * 章 xxx
|
### 深度学习500问-第 * 章 xxx
|
||||||
|
|
||||||
**负责人(排名不分先后):**
|
**负责人(排名不分先后):**
|
||||||
xxx研究生-xxx(xxx)
|
牛津大学博士生-程泽华
|
||||||
xxx博士生-xxx
|
中科院研究生-郭晓锋
|
||||||
xxx-xxx
|
|
||||||
|
|
||||||
|
|
||||||
**贡献者(排名不分先后):**
|
**贡献者(排名不分先后):**
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,32 @@
|
||||||
volume={1711},
|
volume={1711},
|
||||||
year={2017}
|
year={2017}
|
||||||
}
|
}
|
||||||
|
@article{isola2017image,
|
||||||
|
title={Image-to-image translation with conditional adversarial networks},
|
||||||
|
author={Isola, Phillip and Zhu, Jun-Yan and Zhou, Tinghui and Efros, Alexei A},
|
||||||
|
journal={arXiv preprint},
|
||||||
|
year={2017}
|
||||||
|
}
|
||||||
|
@article{radford2015unsupervised,
|
||||||
|
title={Unsupervised representation learning with deep convolutional generative adversarial networks},
|
||||||
|
author={Radford, Alec and Metz, Luke and Chintala, Soumith},
|
||||||
|
journal={arXiv preprint arXiv:1511.06434},
|
||||||
|
year={2015}
|
||||||
|
}
|
||||||
|
@inproceedings{long2015fully,
|
||||||
|
title={Fully convolutional networks for semantic segmentation},
|
||||||
|
author={Long, Jonathan and Shelhamer, Evan and Darrell, Trevor},
|
||||||
|
booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},
|
||||||
|
pages={3431--3440},
|
||||||
|
year={2015}
|
||||||
|
}
|
||||||
|
@article{murez2017image,
|
||||||
|
title={Image to image translation for domain adaptation},
|
||||||
|
author={Murez, Zak and Kolouri, Soheil and Kriegman, David and Ramamoorthi, Ravi and Kim, Kyungnam},
|
||||||
|
journal={arXiv preprint arXiv:1712.00479},
|
||||||
|
volume={13},
|
||||||
|
year={2017}
|
||||||
|
}
|
||||||
@inproceedings{yi2017dualgan,
|
@inproceedings{yi2017dualgan,
|
||||||
title={DualGAN: Unsupervised Dual Learning for Image-to-Image Translation.},
|
title={DualGAN: Unsupervised Dual Learning for Image-to-Image Translation.},
|
||||||
author={Yi, Zili and Hao (Richard) Zhang and Tan, Ping and Gong, Minglun},
|
author={Yi, Zili and Hao (Richard) Zhang and Tan, Ping and Gong, Minglun},
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,170 @@
|
||||||
# 第七章_生成对抗网络(GAN)
|
|
||||||
|
|
||||||
## GAN的「生成」的本质是什么?
|
#
|
||||||
|
# 7.1 什么是生成对抗网络
|
||||||
|
## GAN的通俗化介绍
|
||||||
|
|
||||||
|
生成对抗网络(GAN, Generative adversarial network)自从2014年被Ian Goodfellow提出以来,掀起来了一股研究热潮。GAN由生成器和判别器组成,生成器负责生成样本,判别器负责判断生成器生成的样本是否为真。生成器要尽可能迷惑判别器,而判别器要尽可能区分生成器生成的样本和真实样本。
|
||||||
|
|
||||||
|
在GAN的原作[1]中,作者将生成器比喻为印假钞票的犯罪分子,判别器则类比为警察。犯罪分子努力让钞票看起来逼真,警察则不断提升对于假钞的辨识能力。二者互相博弈,随着时间的进行,都会越来越强。
|
||||||
|
|
||||||
|
## GAN的形式化表达
|
||||||
|
上述例子只是简要介绍了一下GAN的思想,下面对于GAN做一个形式化的,更加具体的定义。通常情况下,无论是生成器还是判别器,我们都可以用神经网络来实现。那么,我们可以把通俗化的定义用下面这个模型来表示:
|
||||||
|

|
||||||
|
|
||||||
|
上述模型左边是生成器G,其输入是$z$,对于原始的GAN,$z$是由高斯分布随机采样得到的噪声。噪声$z$通过生成器得到了生成的假样本。
|
||||||
|
|
||||||
|
生成的假样本与真实样本放到一起,被随机抽取送入到判别器D,由判别器去区分输入的样本是生成的假样本还是真实的样本。整个过程简单明了,生成对抗网络中的“生成对抗”主要体现在生成器和判别器之间的对抗。
|
||||||
|
|
||||||
|
## GAN的目标函数
|
||||||
|
对于上述神经网络模型,如果想要学习其参数,首先需要一个目标函数。GAN的目标函数定义如下:
|
||||||
|
|
||||||
|
$$\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) = {{\rm E}_{x\sim{p_{data}}(x)}}[\log D(x)] + {{\rm E}_{z\sim{p_z}(z)}}[\log (1 - D(G(z)))]$$
|
||||||
|
|
||||||
|
这个目标函数可以分为两个部分来理解:
|
||||||
|
|
||||||
|
判别器的优化通过$\mathop {\max}\limits_D V(D,G)$实现,$V(D,G)$为判别器的目标函数,其第一项${{\rm E}_{x\sim{p_{data}}(x)}}[\log D(x)]$表示对于从真实数据分布 中采用的样本 ,其被判别器判定为真实样本概率的数学期望。对于真实数据分布 中采样的样本,其预测为正样本的概率当然是越接近1越好。因此希望最大化这一项。第二项${{\rm E}_{z\sim{p_z}(z)}}[\log (1 - D(G(z)))]$表示:对于从噪声P_z(z)分布当中采样得到的样本经过生成器生成之后得到的生成图片,然后送入判别器,其预测概率的负对数的期望,这个值自然是越大越好,这个值越大, 越接近0,也就代表判别器越好。
|
||||||
|
|
||||||
|
生成器的优化通过$\mathop {\min }\limits_G({\mathop {\max }\limits_D V(D,G)})$实现。注意,生成器的目标不是$\mathop {\min }\limits_GV(D,G)$,即生成器**不是最小化判别器的目标函数**,生成器最小化的是**判别器目标函数的最大值**,判别器目标函数的最大值代表的是真实数据分布与生成数据分布的JS散度(详情可以参阅附录的推导),JS散度可以度量分布的相似性,两个分布越接近,JS散度越小。
|
||||||
|
|
||||||
|
|
||||||
|
## GAN的目标函数和交叉熵
|
||||||
|
判别器目标函数写成离散形式即为$$V(D,G)=-\frac{1}{m}\sum_{i=1}^{i=m}logD(x^i)-\frac{1}{m}\sum_{i=1}^{i=m}log(1-D(\tilde{x}^i))$$
|
||||||
|
可以看出,这个目标函数和交叉熵是一致的,即**判别器的目标是最小化交叉熵损失,生成器的目标是最小化生成数据分布和真实数据分布的JS散度**
|
||||||
|
|
||||||
|
|
||||||
|
-------------------
|
||||||
|
[1]: Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems. 2014.
|
||||||
|
|
||||||
|
# 7.2 什么是图像翻译
|
||||||
|
GAN作为一种强有力的生成模型,其应用十分广泛。最为常见的应用就是图像翻译。所谓图像翻译,指从一副图像到另一副图像的转换。可以类比机器翻译,一种语言转换为另一种语言。常见的图像翻译任务有:
|
||||||
|
- 图像去噪
|
||||||
|
- 图像超分辨
|
||||||
|
- 图像补全
|
||||||
|
- 风格迁移
|
||||||
|
- ...
|
||||||
|
|
||||||
|
本节将介绍一个经典的图像翻译网络及其改进。
|
||||||
|
# 7.2.1 pix2pix:图像翻译
|
||||||
|
在这篇paper里面,作者提出的框架十分简洁优雅(好用的算法总是简洁优雅的)。相比以往算法的大量专家知识,手工复杂的loss。这篇paper非常粗暴,使用CGAN处理了一系列的转换问题。下面是一些转换示例:
|
||||||
|

|
||||||
|
|
||||||
|
上面展示了许多有趣的结果,比如分割图$\longrightarrow$街景图,边缘图$\longrightarrow$真实图。对于第一次看到的时候还是很惊艳的,那么这个是怎么做到的呢?我们可以设想一下,如果是我们,我们自己会如何设计这个网络。
|
||||||
|
|
||||||
|
## 如何做图像翻译?
|
||||||
|
最直接的想法就是,设计一个CNN网络,直接建立输入-输出的映射,就像图像去噪问题一样。可是对于上面的问题,这样做会带来一个问题。**生成图像质量不清晰。**
|
||||||
|
|
||||||
|
拿左上角的分割图$\longrightarrow$街景图为例,语义分割图的每个标签比如“汽车”可能对应不同样式,颜色的汽车。那么模型学习到的会是所有不同汽车的评均,这样会造成模糊。
|
||||||
|
|
||||||
|
|
||||||
|
## 如何解决模糊呢?
|
||||||
|
这里作者想了一个办法,即加入GAN的Loss去惩罚模型。GAN相比于传统生成式模型可以较好的生成高分辨率图片。思路也很简单,在上述直观想法的基础上加入一个判别器,判断输入图片是否是真实样本。模型示意图如下:
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
上图模型和CGAN有所不同,但它是一个CGAN,只不过输入只有一个,这个输入就是条件信息。原始的CGAN需要输入随机噪声,以及条件。这里之所有没有输入噪声信息,是因为在实际实验中,如果输入噪声和条件,噪声往往被淹没在条件C当中,所以这里直接省去了。
|
||||||
|
|
||||||
|
## 图像翻译的tricks
|
||||||
|
从上面两点可以得到最终的Loss由两部分构成:
|
||||||
|
- 输出和标签信息的L1 Loss。
|
||||||
|
- GAN Loss
|
||||||
|
- 测试也使用Dropout,以使输出多样化
|
||||||
|

|
||||||
|
|
||||||
|
采用L1 Loss而不是L2 Loss的理由很简单,L1 Loss相比于L2 Loss保边缘(L2 Loss基于高斯先验,L1 Loss基于拉普拉斯先验)。
|
||||||
|
|
||||||
|
GAN Loss为LSGAN的最小二乘Loss,并使用PatchGAN(进一步保证生成图像的清晰度)。PatchGAN将图像换分成很多个Patch,并对每一个Patch使用判别器进行判别(实际代码实现有更取巧的办法),将所有Patch的Loss求平均作为最终的Loss。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 7.2.2 pix2pixHD:高分辨率图像生成
|
||||||
|
这篇paper作为pix2pix改进版本,如其名字一样,主要是可以产生高分辨率的图像。具体来说,作者的贡献主要在以下两个方面:
|
||||||
|
- 使用多尺度的生成器以及判别器等方式从而生成高分辨率图像。
|
||||||
|
- 使用了一种非常巧妙的方式,实现了对于同一个输入,产生不同的输出。并且实现了交互式的语义编辑方式
|
||||||
|
## 如何生成高分辨率图像
|
||||||
|
为了生成高分辨率图像,作者主要从三个层面做了改进:
|
||||||
|
- 模型结构
|
||||||
|
- Loss设计
|
||||||
|
- 使用Instance-map的图像进行训练。
|
||||||
|
### 模型结构
|
||||||
|

|
||||||
|
生成器由两部分组成,G1和G2,其中G2又被割裂成两个部分。G1和pix2pix的生成器没有差别,就是一个end2end的U-Net结构。G2的左半部分提取特征,并和G1的输出层的前一层特征进行相加融合信息,把融合后的信息送入G2的后半部分输出高分辨率图像。
|
||||||
|
|
||||||
|
判别器使用多尺度判别器,在三个不同的尺度上进行判别并对结果取平均。判别的三个尺度为:原图,原图的1/2降采样,原图的1/4降采样。显然,越粗糙的尺度感受野越大,越关注全局一致性。
|
||||||
|
|
||||||
|
生成器和判别器均使用多尺度结构实现高分辨率重建,思路和PGGAN类似,但实际做法差别比较大。
|
||||||
|
|
||||||
|
### Loss设计
|
||||||
|
这里的Loss由三部分组成:
|
||||||
|
- GAN loss:和pix2pix一样,使用PatchGAN。
|
||||||
|
- Feature matching loss:将生成的样本和Ground truth分别送入判别器提取特征,然后对特征做Element-wise loss
|
||||||
|
- Content loss:将生成的样本和Ground truth分别送入VGG16提取特征,然后对特征做Element-wise loss
|
||||||
|

|
||||||
|
|
||||||
|
使用Feature matching loss和Content loss计算特征的loss,而不是计算生成样本和Ground truth的MSE,主要在于MSE会造成生成的图像过度平滑,缺乏细节。Feature matching loss和Content loss只保证内容一致,细节则由GAN去学习。
|
||||||
|
### 使用Instance-map的图像进行训练
|
||||||
|
pix2pix采用语义分割的结果进行训练,可是语义分割结果没有对同类物体进行区分,导致多个同一类物体排列在一起的时候出现模糊,这在街景图中尤为常见。在这里,作者使用个体分割(Instance-level segmention)的结果来进行训练,因为个体分割的结果提供了同一类物体的边界信息。具体做法如下:
|
||||||
|
- 根据个体分割的结果求出Boundary map
|
||||||
|
- 将Boundary map与输入的语义标签concatnate到一起作为输入
|
||||||
|
Boundary map求法很简单,直接遍历每一个像素,判断其4邻域像素所属语义类别信息,如果有不同,则置为1。下面是一个示例:
|
||||||
|

|
||||||
|
### 语义编辑
|
||||||
|
不同于pix2pix实现生成多样性的方法(使用Dropout),这里采用了一个非常巧妙的办法,即学习一个条件(Condition)作为条件GAN的输入,不同的输入条件就得到了不同的输出,从而实现了多样化的输出,而且还是可编辑的。具体做法如下:
|
||||||
|

|
||||||
|
- 首先训练一个编码器
|
||||||
|
- 利用编码器提取原始图片的特征,然后根据Labels信息进行Average pooling,得到特征(上图的Features)。这个Features的每一类像素的值都代表了这类标签的信息。
|
||||||
|
- 如果输入图像有足够的多,那么Features的每一类像素的值就代表了这类物体的先验分布。
|
||||||
|
- 对所有输入的训练图像通过编码器提取特征,然后进行K-means聚类,得到K个聚类中心,以K个聚类中心代表不同的颜色,纹理等信息。
|
||||||
|
- 实际生成图像时,除了输入语义标签信息,还要从K个聚类中心随机选择一个,即选择一个颜色/纹理风格
|
||||||
|
|
||||||
|
这个方法总的来说非常巧妙,通过学习数据的隐变量达到控制图像颜色纹理风格信息。
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
作者主要的贡献在于:
|
||||||
|
- 提出了生成高分辨率图像的多尺度网络结构,包括生成器,判别器
|
||||||
|
- 提出了Feature loss和VGG loss提升图像的分辨率
|
||||||
|
- 通过学习隐变量达到控制图像颜色,纹理风格信息
|
||||||
|
- 通过Boundary map提升重叠物体的清晰度
|
||||||
|
|
||||||
|
可以看出,这篇paper除了第三点,都是针对性的解决高分辨率图像生成的问题的。可是本篇工作只是生成了高分辨率的图像,那对于视频呢?接下来会介绍Vid2Vid,这篇paper站在pix2pixHD的基础上,继续做了许多拓展,特别是针对视频前后帧不一致的问题做了许多优化。
|
||||||
|
|
||||||
|
|
||||||
|
# 7.2.3 vid2vid:高分辨率视频生成
|
||||||
|
待续。。。。
|
||||||
|
|
||||||
|
|
||||||
|
## 7.1 GAN的「生成」的本质是什么?
|
||||||
GAN的形式是:两个网络,G(Generator)和D(Discriminator)。Generator是一个生成图片的网络,它接收一个随机的噪声z,记做G(z)。Discriminator是一个判别网络,判别一张图片是不是“真实的”。它的输入是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。
|
GAN的形式是:两个网络,G(Generator)和D(Discriminator)。Generator是一个生成图片的网络,它接收一个随机的噪声z,记做G(z)。Discriminator是一个判别网络,判别一张图片是不是“真实的”。它的输入是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。
|
||||||
|
|
||||||
GAN*生成*能力是*学习分布*,引入的latent variable的noise使习得的概率分布进行偏移。因此在训练GAN的时候,latent variable**不能**引入均匀分布(uniform distribution),因为均匀分布的数据的引入并不会改变概率分布。
|
GAN*生成*能力是*学习分布*,引入的latent variable的noise使习得的概率分布进行偏移。因此在训练GAN的时候,latent variable**不能**引入均匀分布(uniform distribution),因为均匀分布的数据的引入并不会改变概率分布。
|
||||||
|
|
||||||
## GAN能做数据增广吗?
|
## 7.2 GAN能做数据增广吗?
|
||||||
GAN能够从一个模型引入一个随机数之后「生成」无限的output,用GAN来做数据增广似乎很有吸引力并且是一个极清晰的一个insight。然而,纵观整个GAN的训练过程,Generator习得分布再引入一个Distribution(Gaussian或其他)的噪声以「骗过」Discriminator,并且无论是KL Divergence或是Wasserstein Divergence,本质还是信息衡量的手段(在本章中其余部分介绍),能「骗过」Discriminator的Generator一定是能在引入一个Distribution的噪声的情况下最好的结合已有信息。
|
GAN能够从一个模型引入一个随机数之后「生成」无限的output,用GAN来做数据增广似乎很有吸引力并且是一个极清晰的一个insight。然而,纵观整个GAN的训练过程,Generator习得分布再引入一个Distribution(Gaussian或其他)的噪声以「骗过」Discriminator,并且无论是KL Divergence或是Wasserstein Divergence,本质还是信息衡量的手段(在本章中其余部分介绍),能「骗过」Discriminator的Generator一定是能在引入一个Distribution的噪声的情况下最好的结合已有信息。
|
||||||
|
|
||||||
训练好的GAN应该能够很好的使用已有的数据的信息(特征或分布),现在问题来了,这些信息本来就包含在数据里面,有必要把信息丢到Generator学习使得的结果加上噪声作为训练模型的输入吗?
|
训练好的GAN应该能够很好的使用已有的数据的信息(特征或分布),现在问题来了,这些信息本来就包含在数据里面,有必要把信息丢到Generator学习使得的结果加上噪声作为训练模型的输入吗?
|
||||||
|
|
||||||
## VAE与GAN有什么不同?
|
## 7.3 VAE与GAN有什么不同?
|
||||||
1. VAE可以直接用在离散型数据。
|
1. VAE可以直接用在离散型数据。
|
||||||
2. VAE整个训练流程只靠一个假设的loss函数和KL Divergence逼近真实分布。GAN没有假设单个loss函数, 而是让判别器D和生成器G互相博弈,以期得到Nash Equilibrium。
|
2. VAE整个训练流程只靠一个假设的loss函数和KL Divergence逼近真实分布。GAN没有假设单个loss函数, 而是让判别器D和生成器G互相博弈,以期得到Nash Equilibrium。
|
||||||
|
|
||||||
## 有哪些优秀的GAN?
|
## 7.4 有哪些优秀的GAN?
|
||||||
|
|
||||||
### DCGAN
|
### 7.4.1 DCGAN
|
||||||
|
|
||||||
### WGAN/WGAN-GP
|
[DCGAN](http://arxiv.org/abs/1511.06434)是GAN较为早期的「生成」效果最好的GAN了,很多人用DCGAN的简单、有效的生成能力做了很多很皮的工作,比如[GAN生成二次元萌妹](https://blog.csdn.net/liuxiao214/article/details/74502975)之类。
|
||||||
|
关于DCGAN主要集中讨论以下问题:
|
||||||
|
|
||||||
|
1. DCGAN的contribution?
|
||||||
|
2. DCGAN实操上有什么问题?
|
||||||
|
|
||||||
|
效果好个人主要认为是引入了卷积并且给了一个非常优雅的结构,DCGAN的Generator和Discriminator几乎是**对称的**,而之后很多研究都遵从了这个对称结构,如此看来学界对这种对称架构有极大的肯定。完全使用了卷积层代替全链接层,没有pooling和upsample。其中upsample是将low resolution到high resolution的方法,而DCGAN用卷积的逆运算来完成low resolution到high resolution的操作,这简单的替换为什么成为提升GAN稳定性的原因?
|
||||||
|

|
||||||
|
|
||||||
|
图中是Upsample的原理图,十分的直观,宛如低分屏换高分屏。然而Upsample和逆卷积最大的不一样是Upsample其实只能放一样的颜色来填充,而逆卷积它是个求值的过程,也就是它要算出一个具体值来,可能是一样的也可能是不一样的——如此,孰优孰劣高下立判。
|
||||||
|
|
||||||
|
DCGAN提出了其生成的特征具有向量的计算特性。
|
||||||
|
|
||||||
|
[DCGAN Keras实现](https://github.com/jacobgil/keras-dcgan)
|
||||||
|
### 7.4.2 WGAN/WGAN-GP
|
||||||
|
|
||||||
WGAN及其延伸是被讨论的最多的部分,原文连发两文,第一篇(Towards principled methods for training generative adversarial networks)非常solid的提了一堆的数学,一作Arjovsky克朗所的数学能力果然一个打十几个。后来给了第二篇Wasserstein GAN,可以说直接给结果了,和第一篇相比,第二篇更加好接受。
|
WGAN及其延伸是被讨论的最多的部分,原文连发两文,第一篇(Towards principled methods for training generative adversarial networks)非常solid的提了一堆的数学,一作Arjovsky克朗所的数学能力果然一个打十几个。后来给了第二篇Wasserstein GAN,可以说直接给结果了,和第一篇相比,第二篇更加好接受。
|
||||||
|
|
||||||
|
|
@ -44,7 +190,7 @@ $$JS(P_1||P_2)=\frac{1}{2}KL(P_1||\frac{P_1+P_2}{2})$$
|
||||||
3. 对更新后的权重强制截断到一定范围内,比如[-0.01,0.01],以满足lipschitz连续性条件。
|
3. 对更新后的权重强制截断到一定范围内,比如[-0.01,0.01],以满足lipschitz连续性条件。
|
||||||
4. 论文中也推荐使用SGD,RMSprop等优化器,不要基于使用动量的优化算法,比如adam。
|
4. 论文中也推荐使用SGD,RMSprop等优化器,不要基于使用动量的优化算法,比如adam。
|
||||||
|
|
||||||
然而,由于D和G其实是各自有一个loss的,G和D是可以**用不同的优化器**的。个人认为Best Practice是G用SGD或RMSprop,而D用Adam。
|
然而,由于D和G其实是各自有一个loss的,G和D是可以**用不同的优化器**的。个人认为Best Practice是G用SGD或RMSprop,而D用Adam。
|
||||||
|
|
||||||
很期待未来有专门针对寻找均衡态的优化方法。
|
很期待未来有专门针对寻找均衡态的优化方法。
|
||||||
|
|
||||||
|
|
@ -53,49 +199,205 @@ $$JS(P_1||P_2)=\frac{1}{2}KL(P_1||\frac{P_1+P_2}{2})$$
|
||||||
**如何理解Wasserstein距离?**
|
**如何理解Wasserstein距离?**
|
||||||
Wasserstein距离与optimal transport有一些关系,并且从数学上想很好的理解需要一定的测度论的知识。
|
Wasserstein距离与optimal transport有一些关系,并且从数学上想很好的理解需要一定的测度论的知识。
|
||||||
|
|
||||||
### condition GAN
|
### 7.4.3 condition GAN
|
||||||
|
条件生成对抗网络(CGAN, Conditional Generative Adversarial Networks)作为一个GAN的改进,其一定程度上解决了GAN生成结果的不确定性。如果在Mnist数据集上训练原始GAN,GAN生成的图像是完全不确定的,具体生成的是数字1,还是2,还是几,根本不可控。为了让生成的数字可控,我们可以把数据集做一个切分,把数字0~9的数据集分别拆分开训练9个模型,不过这样太麻烦了,也不现实。因为数据集拆分不仅仅是分类麻烦,更主要在于,每一个类别的样本少,拿去训练GAN很有可能导致欠拟合。因此,CGAN就应运而生了。我们先看一下CGAN的网络结构:
|
||||||
### InfoGAN
|

|
||||||
|
从网络结构图可以看到,对于生成器Generator,其输入不仅仅是随机噪声的采样z,还有欲生成图像的标签信息。比如对于mnist数据生成,就是一个one-hot向量,某一维度为1则表示生成某个数字的图片。同样地,判别器的输入也包括样本的标签。这样就使得判别器和生成器可以学习到样本和标签之间的联系。Loss如下:
|
||||||
|
$$\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) = {{\rm E}_{x\sim{p_{data}}(x)}}[\log D(x|y)] + {{\rm E}_{z\sim{p_z}(z)}}[\log (1 - D(G(z|y)))]$$
|
||||||
|
Loss设计和原始GAN基本一致,只不过生成器,判别器的输入数据是一个条件分布。在具体编程实现时只需要对随机噪声采样z和输入条件y做一个级联即可。
|
||||||
|
### 7.4.4 InfoGAN
|
||||||
通过最大化互信息(c,c’)来生成同类别的样本。
|
通过最大化互信息(c,c’)来生成同类别的样本。
|
||||||
|
|
||||||
$$L^{infoGAN}_{D,Q}=L^{GAN}_D-\lambda L_1(c,c')$$
|
$$L^{infoGAN}_{D,Q}=L^{GAN}_D-\lambda L_1(c,c')$$
|
||||||
$$L^{infoGAN}_{G}=L^{GAN}_G-\lambda L_1(c,c')$$
|
$$L^{infoGAN}_{G}=L^{GAN}_G-\lambda L_1(c,c')$$
|
||||||
|
|
||||||
### CycleGAN
|
### 7.4.5 CycleGAN
|
||||||
|
|
||||||
**CycleGAN与DualGAN之间的区别**
|
**CycleGAN与DualGAN之间的区别**
|
||||||
|
|
||||||
### StarGAN
|
### 7.4.6 StarGAN
|
||||||
目前Image-to-Image Translation做的最好的GAN。
|
目前Image-to-Image Translation做的最好的GAN。
|
||||||
|
|
||||||
## Self-Attention GAN
|
## 7.5 GAN训练有什么难点?
|
||||||
|
由于GAN的收敛要求**两个网络(D&G)同时达到一个均衡**
|
||||||
|
|
||||||
## GAN训练有什么难点?
|
## 7.6 GAN与强化学习中的AC网络有何区别?
|
||||||
由于GAN的收敛要求**两个网络(D&G)同时达到一个均衡**,
|
|
||||||
|
|
||||||
## GAN与强化学习中的AC网络有何区别?
|
|
||||||
强化学习中的AC网络也是Dual Network,似乎从某个角度上理解可以为一个GAN。但是GAN本身
|
强化学习中的AC网络也是Dual Network,似乎从某个角度上理解可以为一个GAN。但是GAN本身
|
||||||
## GAN的可创新的点
|
|
||||||
GAN是一种半监督学习模型,对训练集不需要太多有标签的数据。
|
|
||||||
|
|
||||||
## 如何训练GAN?
|
## 7.7 GAN的可创新的点
|
||||||
|
GAN是一种半监督学习模型,对训练集不需要太多有标签的数据。我认为GAN用在Super Resolution、Inpainting、Image-to-Image Translation(俗称鬼畜变脸)也好,无非是以下三点:
|
||||||
|
|
||||||
|
1. 更高效的无监督的利用卷积结构或者结合网络结构的特点对特征进行**复用**。(如Image-to-Image Translation提取特征之后用loss量化特征及其share的信息以完成整个特征复用过程)
|
||||||
|
2. 一个高效的loss function来**量化变化**。
|
||||||
|
3. 一个短平快的拟合分布的方法。(如WGAN对GAN的贡献等)
|
||||||
|
|
||||||
|
当然还有一些非主流的方案,比如说研究latent space甚至如何优雅的加噪声,这类方案虽然很重要,但是囿于本人想象力及实力不足,难以想到解决方案。
|
||||||
|
|
||||||
|
## 7.8 如何训练GAN?
|
||||||
判别器D在GAN训练中是比生成器G更强的网络
|
判别器D在GAN训练中是比生成器G更强的网络
|
||||||
|
|
||||||
Instance Norm比Batch Norm的效果要更好。
|
Instance Norm比Batch Norm的效果要更好。
|
||||||
|
|
||||||
使用逆卷积来生成图片会比用全连接层效果好,全连接层会有较多的噪点,逆卷积层效果清晰。
|
使用逆卷积来生成图片会比用全连接层效果好,全连接层会有较多的噪点,逆卷积层效果清晰。
|
||||||
|
|
||||||
## GAN如何解决NLP问题
|
## 7.9 GAN如何解决NLP问题
|
||||||
|
|
||||||
GAN只适用于连续型数据的生成,对于离散型数据效果不佳,因此假如NLP方法直接应用的是character-wise的方案,Gradient based的GAN是无法将梯度Back propagation(BP)给生成网络的,因此从训练结果上看,GAN中G的表现长期被D压着打。
|
GAN只适用于连续型数据的生成,对于离散型数据效果不佳,因此假如NLP方法直接应用的是character-wise的方案,Gradient based的GAN是无法将梯度Back propagation(BP)给生成网络的,因此从训练结果上看,GAN中G的表现长期被D压着打。
|
||||||
## Reference
|
## 7.10 Reference
|
||||||
### DCGAN部分:
|
|
||||||
|
|
||||||
|
### DCGAN部分:
|
||||||
|
* Radford, A., Metz, L., & Chintala, S. (2015). Unsupervised representation learning with deep convolutional generative adversarial networks. arXiv preprint arXiv:1511.06434.
|
||||||
|
* Long, J., Shelhamer, E., & Darrell, T. (2015). Fully convolutional networks for semantic segmentation. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 3431-3440).
|
||||||
|
* [可视化卷积操作](https://github.com/vdumoulin/conv_arithmetic)
|
||||||
### WGAN部分:
|
### WGAN部分:
|
||||||
* Arjovsky, M., & Bottou, L. (2017). Towards principled methods for training generative adversarial networks. arXiv preprint arXiv:1701.04862.
|
|
||||||
* Arjovsky, M., Chintala, S., & Bottou, L. (2017). Wasserstein gan. arXiv preprint arXiv:1701.07875.
|
* Arjovsky, M., Chintala, S., & Bottou, L. (2017). Wasserstein gan. arXiv preprint arXiv:1701.07875.
|
||||||
* Nowozin, S., Cseke, B., & Tomioka, R. (2016). f-gan: Training generative neural samplers using variational divergence minimization. In Advances in Neural Information Processing Systems (pp. 271-279).
|
* Nowozin, S., Cseke, B., & Tomioka, R. (2016). f-gan: Training generative neural samplers using variational divergence minimization. In Advances in Neural Information Processing Systems (pp. 271-279).
|
||||||
* Wu, J., Huang, Z., Thoma, J., Acharya, D., & Van Gool, L. (2018, September). Wasserstein Divergence for GANs. In Proceedings of the European Conference on Computer Vision (ECCV) (pp. 653-668).
|
* Wu, J., Huang, Z., Thoma, J., Acharya, D., & Van Gool, L. (2018, September). Wasserstein Divergence for GANs. In Proceedings of the European Conference on Computer Vision (ECCV) (pp. 653-668).
|
||||||
|
|
||||||
### CycleGAN
|
|
||||||
Zhu, J. Y., Park, T., Isola, P., & Efros, A. A. (2017). Unpaired image-to-image translation using cycle-consistent adversarial networks. arXiv preprint.
|
### Image2Image Translation
|
||||||
|
* Isola P, Zhu JY, Zhou T, Efros AA. Image-to-image translation with conditional adversarial networks. arXiv preprint. 2017 Jul 21.
|
||||||
|
* Zhu, J. Y., Park, T., Isola, P., & Efros, A. A. (2017). Unpaired image-to-image translation using cycle-consistent adversarial networks. arXiv preprint.(CycleGAN)
|
||||||
|
* Choi, Y., Choi, M., Kim, M., Ha, J. W., Kim, S., & Choo, J. (2017). Stargan: Unified generative adversarial networks for multi-domain image-to-image translation. arXiv preprint, 1711.
|
||||||
|
* Murez, Z., Kolouri, S., Kriegman, D., Ramamoorthi, R., & Kim, K. (2017). Image to image translation for domain adaptation. arXiv preprint arXiv:1712.00479, 13.
|
||||||
|
|
||||||
|
### GAN的训练
|
||||||
|
* Arjovsky, M., & Bottou, L. (2017). Towards principled methods for training generative adversarial networks. arXiv preprint arXiv:1701.04862.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 生成模型和判别模型
|
||||||
|
https://blog.csdn.net/u010358304/article/details/79748153
|
||||||
|
原文:https://blog.csdn.net/u010089444/article/details/78946039
|
||||||
|
|
||||||
|
# 生成模型和判别模型对比
|
||||||
|
https://blog.csdn.net/love666666shen/article/details/75522489
|
||||||
|
|
||||||
|
|
||||||
|
# 直观理解GAN的博弈过程
|
||||||
|
https://blog.csdn.net/u010089444/article/details/78946039
|
||||||
|
|
||||||
|
# GAN原理
|
||||||
|
1.GAN的原理:
|
||||||
|
|
||||||
|
GAN的主要灵感来源于博弈论中零和博弈的思想,应用到深度学习神经网络上来说,就是通过生成网络G(Generator)和判别网络D(Discriminator)不断博弈,进而使G学习到数据的分布,如果用到图片生成上,则训练完成后,G可以从一段随机数中生成逼真的图像。G, D的主要功能是:
|
||||||
|
|
||||||
|
● G是一个生成式的网络,它接收一个随机的噪声z(随机数),通过这个噪声生成图像
|
||||||
|
|
||||||
|
● D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片
|
||||||
|
|
||||||
|
训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量辨别出G生成的假图像和真实的图像。这样,G和D构成了一个动态的“博弈过程”,最终的平衡点即纳什均衡点.
|
||||||
|
---------------------
|
||||||
|
作者:山水之间2018
|
||||||
|
来源:CSDN
|
||||||
|
原文:https://blog.csdn.net/Gavinmiaoc/article/details/79947877
|
||||||
|
|
||||||
|
# GAN的特点
|
||||||
|
2. GAN的特点:
|
||||||
|
|
||||||
|
● 相比较传统的模型,他存在两个不同的网络,而不是单一的网络,并且训练方式采用的是对抗训练方式
|
||||||
|
|
||||||
|
● GAN中G的梯度更新信息来自判别器D,而不是来自数据样本
|
||||||
|
|
||||||
|
# GAN优缺点?
|
||||||
|
|
||||||
|
3. GAN 的优点:
|
||||||
|
|
||||||
|
(以下部分摘自ian goodfellow 在Quora的问答)
|
||||||
|
|
||||||
|
● GAN是一种生成式模型,相比较其他生成模型(玻尔兹曼机和GSNs)只用到了反向传播,而不需要复杂的马尔科夫链
|
||||||
|
|
||||||
|
● 相比其他所有模型, GAN可以产生更加清晰,真实的样本
|
||||||
|
|
||||||
|
● GAN采用的是一种无监督的学习方式训练,可以被广泛用在无监督学习和半监督学习领域
|
||||||
|
|
||||||
|
● 相比于变分自编码器, GANs没有引入任何决定性偏置( deterministic bias),变分方法引入决定性偏置,因为他们优化对数似然的下界,而不是似然度本身,这看起来导致了VAEs生成的实例比GANs更模糊
|
||||||
|
|
||||||
|
● 相比VAE, GANs没有变分下界,如果鉴别器训练良好,那么生成器可以完美的学习到训练样本的分布.换句话说,GANs是渐进一致的,但是VAE是有偏差的
|
||||||
|
|
||||||
|
● GAN应用到一些场景上,比如图片风格迁移,超分辨率,图像补全,去噪,避免了损失函数设计的困难,不管三七二十一,只要有一个的基准,直接上判别器,剩下的就交给对抗训练了。
|
||||||
|
|
||||||
|
|
||||||
|
4. GAN的缺点:
|
||||||
|
|
||||||
|
● 训练GAN需要达到纳什均衡,有时候可以用梯度下降法做到,有时候做不到.我们还没有找到很好的达到纳什均衡的方法,所以训练GAN相比VAE或者PixelRNN是不稳定的,但我认为在实践中它还是比训练玻尔兹曼机稳定的多
|
||||||
|
|
||||||
|
● GAN不适合处理离散形式的数据,比如文本
|
||||||
|
|
||||||
|
● GAN存在训练不稳定、梯度消失、模式崩溃的问题(目前已解决)
|
||||||
|
---------------------
|
||||||
|
作者:山水之间2018
|
||||||
|
来源:CSDN
|
||||||
|
原文:https://blog.csdn.net/Gavinmiaoc/article/details/79947877
|
||||||
|
版权声明:本文为博主原创文章,转载请附上博文链接!
|
||||||
|
|
||||||
|
# 模式崩溃(model collapse)原因
|
||||||
|
一般出现在GAN训练不稳定的时候,具体表现为生成出来的结果非常差,但是即使加长训练时间后也无法得到很好的改善。
|
||||||
|
|
||||||
|
具体原因可以解释如下:GAN采用的是对抗训练的方式,G的梯度更新来自D,所以G生成的好不好,得看D怎么说。具体就是G生成一个样本,交给D去评判,D会输出生成的假样本是真样本的概率(0-1),相当于告诉G生成的样本有多大的真实性,G就会根据这个反馈不断改善自己,提高D输出的概率值。但是如果某一次G生成的样本可能并不是很真实,但是D给出了正确的评价,或者是G生成的结果中一些特征得到了D的认可,这时候G就会认为我输出的正确的,那么接下来我就这样输出肯定D还会给出比较高的评价,实际上G生成的并不怎么样,但是他们两个就这样自我欺骗下去了,导致最终生成结果缺失一些信息,特征不全。
|
||||||
|
---------------------
|
||||||
|
作者:山水之间2018
|
||||||
|
来源:CSDN
|
||||||
|
原文:https://blog.csdn.net/Gavinmiaoc/article/details/79947877
|
||||||
|
版权声明:本文为博主原创文章,转载请附上博文链接!
|
||||||
|
|
||||||
|
# 为什么GAN不适合处理文本数据
|
||||||
|
1. 文本数据相比较图片数据来说是离散的,因为对于文本来说,通常需要将一个词映射为一个高维的向量,最终预测的输出是一个one-hot向量,假设softmax的输出是(0.2, 0.3, 0.1,0.2,0.15,0.05)那么变为onehot是(0,1,0,0,0,0),如果softmax输出是(0.2, 0.25, 0.2, 0.1,0.15,0.1 ),one-hot仍然是(0, 1, 0, 0, 0, 0),所以对于生成器来说,G输出了不同的结果但是D给出了同样的判别结果,并不能将梯度更新信息很好的传递到G中去,所以D最终输出的判别没有意义。
|
||||||
|
|
||||||
|
2. 另外就是GAN的损失函数是JS散度,JS散度不适合衡量不想交分布之间的距离。
|
||||||
|
|
||||||
|
(WGAN虽然使用wassertein距离代替了JS散度,但是在生成文本上能力还是有限,GAN在生成文本上的应用有seq-GAN,和强化学习结合的产物)
|
||||||
|
---------------------
|
||||||
|
作者:山水之间2018
|
||||||
|
来源:CSDN
|
||||||
|
原文:https://blog.csdn.net/Gavinmiaoc/article/details/79947877
|
||||||
|
版权声明:本文为博主原创文章,转载请附上博文链接!
|
||||||
|
|
||||||
|
# 训练GAN的一些技巧
|
||||||
|
|
||||||
|
1. 输入规范化到(-1,1)之间,最后一层的激活函数使用tanh(BEGAN除外)
|
||||||
|
|
||||||
|
2. 使用wassertein GAN的损失函数,
|
||||||
|
|
||||||
|
3. 如果有标签数据的话,尽量使用标签,也有人提出使用反转标签效果很好,另外使用标签平滑,单边标签平滑或者双边标签平滑
|
||||||
|
|
||||||
|
4. 使用mini-batch norm, 如果不用batch norm 可以使用instance norm 或者weight norm
|
||||||
|
|
||||||
|
5. 避免使用RELU和pooling层,减少稀疏梯度的可能性,可以使用leakrelu激活函数
|
||||||
|
|
||||||
|
6. 优化器尽量选择ADAM,学习率不要设置太大,初始1e-4可以参考,另外可以随着训练进行不断缩小学习率,
|
||||||
|
|
||||||
|
7. 给D的网络层增加高斯噪声,相当于是一种正则
|
||||||
|
---------------------
|
||||||
|
作者:山水之间2018
|
||||||
|
来源:CSDN
|
||||||
|
原文:https://blog.csdn.net/Gavinmiaoc/article/details/79947877
|
||||||
|
版权声明:本文为博主原创文章,转载请附上博文链接!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 实例理解GAN实现过程
|
||||||
|
https://blog.csdn.net/sxf1061926959/article/details/54630462
|
||||||
|
|
||||||
|
# DCGAN、WGAN、WGAN-GP、LSGAN、BEGAN原理总结及对比
|
||||||
|
https://blog.csdn.net/qq_25737169/article/details/78857788
|
||||||
|
|
||||||
|
## DCGAN
|
||||||
|
### DCGAN原理理解?
|
||||||
|
### 优缺点?
|
||||||
|
|
||||||
|
# GAN对噪声z的分布有要求吗?常用哪些分布?
|
||||||
|
一般没有特别要求,常用有高斯分布、均匀分布。噪声的维数至少要达到数据流形的内在维数,才能产生足够的diversity,mnist大概是6维,CelebA大概是20维(参考:https://zhuanlan.zhihu.com/p/26528060)
|
||||||
|
https://blog.csdn.net/witnessai1/article/details/78507065/
|
||||||
|
|
||||||
|
# 现有GAN存在哪些关键属性缺失?
|
||||||
|
http://www.elecfans.com/d/707141.html
|
||||||
|
# 图解什么是GAN
|
||||||
|
https://www.cnblogs.com/Darwin2000/p/6984253.html
|
||||||
|
|
||||||
|
# GAN有哪些训练难点\原因及解决方案
|
||||||
|
https://www.sohu.com/a/143961544_741733
|
||||||
|
|
||||||
|
# 近年GAN有哪些突破口?
|
||||||
|
https://baijiahao.baidu.com/s?id=1593092872607620265&wfr=spider&for=pc
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 171 KiB |
|
After Width: | Height: | Size: 369 KiB |
|
Before Width: | Height: | Size: 660 KiB After Width: | Height: | Size: 756 KiB |
|
Before Width: | Height: | Size: 228 KiB After Width: | Height: | Size: 281 KiB |
|
After Width: | Height: | Size: 565 KiB |
|
Before Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 564 KiB |
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 253 KiB |
|
Before Width: | Height: | Size: 588 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 290 KiB |
|
Before Width: | Height: | Size: 499 KiB After Width: | Height: | Size: 499 KiB |
|
Before Width: | Height: | Size: 335 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 346 KiB |
|
Before Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 127 KiB |
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 367 KiB |
|
After Width: | Height: | Size: 308 KiB |
|
After Width: | Height: | Size: 256 KiB |
|
After Width: | Height: | Size: 168 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 212 KiB |
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 471 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 183 KiB |
|
After Width: | Height: | Size: 248 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 316 KiB |
|
After Width: | Height: | Size: 272 KiB |
|
After Width: | Height: | Size: 230 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 524 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 90 KiB |