数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
一、卷积运算
1.1 数学卷积
1.1.1 卷积定义
示例:一个激光传感器输出 $ MathJax-Element-43 $ , 表示宇宙飞船在时刻 $ MathJax-Element-252 $ 的位置的观测结果。假设传感器包含噪声,则 $ MathJax-Element-43 $ 与飞船在时刻 $ MathJax-Element-252 $ 的真实位置有偏离。
可以利用观测结果的均值来估计飞船的位置。假设越近的观测结果越相关,于是对最近的观测结果赋予更高的权重。
令 $ MathJax-Element-45 $ 为权重函数,其中 $ MathJax-Element-46 $ 表示观测结果距离当前时刻的间隔,则得到时刻 $ MathJax-Element-252 $ 飞船真实位置的估计:
$ s(t)=\int x(a)w(t-a)da $这种运算就称作卷积
convolution
,用符号星号 $ MathJax-Element-48 $ 表示。理论上 $ MathJax-Element-58 $ 可以为任意的实值函数,但是在这个示例中要求:
- $ MathJax-Element-58 $ 是个有效的概率密度函数,否则 $ MathJax-Element-51 $ 就不是一个加权平均。
- $ MathJax-Element-58 $ 在自变量为负数时,取值为零。否则涉及到未来函数,因为激光传感器只能输出 $ MathJax-Element-252 $ 时刻之前的观测结果。
通常当计算机处理数据时,连续的数据会被离散化,因此时间 $ MathJax-Element-252 $ 只能取离散值。
假设 $ MathJax-Element-55 $ 都是定义在整数时刻 $ MathJax-Element-252 $ 上,则得到离散形式的卷积:
$ s(t)=(x*w)(t)=\sum_{a=-\infty}^{a=\infty}x(a)w(t-a) $实际操作中,因为只能存储有限的数据,所以这些函数的值在有限的点之外均为零。因此无限级数的求和最终是有限级数的求和。
在卷积神经网络中,函数 $ MathJax-Element-57 $ 称作输入,函数 $ MathJax-Element-58 $ 称作核函数,输出有时被称作特征图
feature map
。可以对多个维度进行卷积运算。
如果二维图像 $ MathJax-Element-64 $ 作为输入,则需要使用二维核函数 $ MathJax-Element-368 $ ,卷积运算的输出为:
$ \mathbf S(i,j)=(\mathbf I*\mathbf K)(i,j)=\sum_m\sum_n\mathbf I(m,n)\mathbf K(i-m,j-n) $其中 $ MathJax-Element-61 $ 表示二维图像 $ MathJax-Element-64 $ 的像素点的坐标, $ MathJax-Element-63 $ 表示该坐标处的像素值。
通常 $ MathJax-Element-64 $ 的尺寸较大,如 $ MathJax-Element-65 $ ;而 $ MathJax-Element-368 $ 的尺寸较小,如 $ MathJax-Element-67 $
因为卷积是可交换的,所以可以等价写作:
$ \mathbf S(i,j)=(\mathbf I*\mathbf K)(i,j)=\sum_m\sum_n\mathbf I(i-m,j-n)\mathbf K(m,n) $这称作翻转
flip
了核。卷积的可交换性在数学证明中有用,但是在神经网络中很少使用。
1.1.2 数学卷积与矩阵乘法
离散卷积可以视作输入矩阵与一个特殊的核矩阵的乘法。
对于一维的离散卷积,核矩阵的每一行必须和上一行移动一个元素后相等。
这种类型的矩阵叫做
Toeplitz
矩阵。对于二维的离散卷积,核矩阵对应着一个双重块循环矩阵。
该矩阵大部分元素相等,且非常稀疏(几乎所有元素都为零)。
卷积运算可以转换成矩阵乘法,所以不需要对神经网络库的实现作出大的修改。
1.1.2.1 一维卷积和矩阵乘法
循环矩阵的定义:
$ \mathbf C=\begin{bmatrix}c_0&c_{n-1}&\cdots&c_2&c_1\\c_1&c_0&\cdots&c_3&c_2\\ \vdots&\vdots&\ddots&\vdots&\vdots\\ c_{n-1}&c_{n-2}&\cdots&c_1&c_0\end{bmatrix} $可以利用循环矩阵求一维卷积。
假设有两个长度分别为 $ MathJax-Element-88 $ 和 $ MathJax-Element-297 $ 的序列 $ MathJax-Element-70 $ 和 $ MathJax-Element-71 $ , 则一维卷积为:
$ s(i)=x(i)*w(i)=\sum_{j}x(j)w(i-j) $卷积的长度为 $ MathJax-Element-72 $ 。
- 首先用 0 扩充序列 $ MathJax-Element-73 $ :
由于用 $ MathJax-Element-76 $ 取卷积 $ MathJax-Element-75 $ ,因此构造 $ MathJax-Element-76 $ 的循环矩阵:
$ \mathbf W=\begin{bmatrix}w_p(0)&w_p(L-1)&w_p(L-2)&\cdots&w_p(1)\\ w_p(1)&w_p(0)&w_p(L-1)&\cdots&w_p(2)\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ w_p(L-1)&w_p(L-2)&w_p(L-3)&\cdots&w_p(0) \end{bmatrix} $这里列优先,因此第一列是完全顺序的。
一维卷积为:
$ \mathbf{\vec s}=\mathbf W\cdot x_p= \begin{bmatrix}w_p(0)&w_p(L-1)&w_p(L-2)&\cdots&w_p(1)\\ w_p(1)&w_p(0)&w_p(L-1)&\cdots&w_p(2)\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ w_p(L-1)&w_p(L-2)&w_p(L-3)&\cdots&w_p(0) \end{bmatrix}\cdot \begin{bmatrix}x_p(0)\\ x_p(1)\\ \vdots\\ x_p(L-1)\end{bmatrix} $其中 $ MathJax-Element-77 $ 。
1.1.2.2 二维卷积和矩阵乘法
二维卷积:
$ \mathbf S(i,j)=(\mathbf I*\mathbf K)(i,j)=\sum_m\sum_n\mathbf I(m,n)\mathbf K(i-m,j-n) $假设 $ MathJax-Element-78 $ :
$ \mathbf I=\begin{bmatrix}I_{1,1}&I_{1,2}&\cdots&I_{1,N_I}\\ I_{2,1}&I_{2,2}&\cdots&I_{2,N_I}\\ \vdots&\vdots&\ddots&\vdots\\ I_{M_I,1}&I_{M_I,2}&\cdots&I_{M_I,N_I} \end{bmatrix},\quad \mathbf K=\begin{bmatrix}K_{1,1}&K_{1,2}&\cdots&K_{1,N_K}\\ K_{2,1}&K_{2,2}&\cdots&K_{2,N_K}\\ \vdots&\vdots&\ddots&\vdots\\ K_{M_K,1}&K_{M_K,2}&\cdots&K_{M_K,N_K} \end{bmatrix} $先将 $ MathJax-Element-79 $ 扩充到 $ MathJax-Element-80 $ 维: $ MathJax-Element-81 $ 。扩充之后的新矩阵为 $ MathJax-Element-82 $ 。其中:
$ \mathbf I_p=\begin{bmatrix}I_{1,1}&I_{1,2}&\cdots&I_{1,N_I}&0&\cdots&0\\ I_{2,1}&I_{2,2}&\cdots&I_{2,N_I}&0&\cdots&0\\ \vdots&\vdots&\ddots&\vdots&0&\cdots&0\\ I_{M_I,1}&I_{M_I,2}&\cdots&I_{M_I,N_I}&0&\cdots&0\\ 0&0&\cdots&0&0&\cdots&0\\ \vdots&\vdots&\ddots&\vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&0&0&\cdots&0\\ \end{bmatrix}\\ \mathbf K_p=\begin{bmatrix}K_{1,1}&K_{1,2}&\cdots&K_{1,N_K}&0&\cdots&0\\ K_{2,1}&K_{2,2}&\cdots&K_{2,N_K}&0&\cdots&0\\ \vdots&\vdots&\ddots&\vdots&0&\cdots&0\\ K_{M_K,1}&K_{M_K,2}&\cdots&K_{M_K,N_K}&0&\cdots&0\\ 0&0&\cdots&0&0&\cdots&0\\ \vdots&\vdots&\ddots&\vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&0&0&\cdots&0\\ \end{bmatrix} $用 $ MathJax-Element-85 $ 构造一个列向量 $ MathJax-Element-95 $ :将 $ MathJax-Element-85 $ 的第一行转置之后将其成为 $ MathJax-Element-95 $ 的前 $ MathJax-Element-297 $ 个元素;接下来是第二行的转置....第 $ MathJax-Element-88 $ 行的转置。
$ f_p=(I_{1,1},I_{1,2},\cdots,I_{1,N_I},0,\cdots,I_{M_I,1},I_{M_I,2},\cdots,I_{M_I,N_I},0,\cdots)^T $将 $ MathJax-Element-89 $ 中的每一行,都按照一维卷积中介绍的循环矩阵生成的方法构成一个 $ MathJax-Element-90 $ 的循环矩阵。这些矩阵记做: $ MathJax-Element-91 $ 。
$ \mathbf G_m= \begin{bmatrix} K_{m,1}&0&\cdots&K_{m,2}\\ K_{m,2}&K_{m,1}&\cdots&K_{m,3}\\ \vdots&\vdots&\ddots&\vdots\\ K_{m,N_K}&K_{m,N_K-1}&\cdots&0\\ 0&K_{m,N_K}&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&K_{m,1} \end{bmatrix},\quad m=1,2,\cdots,M $用这些循环矩阵构造一个大的块循环矩阵:
$ \mathbf G_b=\begin{bmatrix}[\mathbf G_1]&[\mathbf G_M]&\cdots& [\mathbf G_2] \\ [\mathbf G_2]&[\mathbf G_1]&\cdots &[\mathbf G_3]\\ \vdots&\vdots&\ddots&\vdots\\ [\mathbf G_M]&[\mathbf G_{M-1}]&\cdots&[\mathbf G_1]\end{bmatrix} $计算: $ MathJax-Element-92 $ 。将 $ MathJax-Element-93 $ 的结果分配到 $ MathJax-Element-342 $ 的各行(与构造 $ MathJax-Element-95 $ 相反的过程),即得到二维卷积。
1.2 神经网络卷积
1.2.1 卷积定义
许多神经网络库会实现一个与卷积有关的函数,称作互相关函数
$ \mathbf S(i,j)=(\mathbf I*\mathbf K)(i,j)=\sum_m\sum_n\mathbf I(i+m,j+n)\mathbf K(m,n) $cross-correlation
。它类似于卷积:有些机器学习库将它称作卷积。事实上在神经网络中,卷积指的就是这个函数(而不是数学意义上的卷积函数)。
神经网络的2维卷积的示例:
这里采用的是神经网络中卷积的定义: $ MathJax-Element-96 $ 。其中, $ MathJax-Element-117 $ 和 $ MathJax-Element-266 $ 由核函数决定。因为 $ MathJax-Element-99 $ ,所以他们的取值范围是 $ MathJax-Element-100 $ 。
单个卷积核只能提取一种类型的特征。
如果希望卷积层能够提取多个特征,则可以并行使用多个卷积核,每个卷积核提取一种特征。我们称输出的
feature map
具有多个通道channel
。feature map
特征图是卷积层的输出的别名,它由多个通道组成,每个通道代表通过卷积提取的某种特征。事实上,当输入为图片或者
feature map
时,池化层、非线性激活层、Batch Normalization
等层的输出也可以称作feature map
。卷积神经网络中,非全连接层、输出层以外的几乎所有层的输出都可以称作feature map
。神经网络中,卷积运算的作用就类似于滤波,因此也称卷积核为
filter
滤波器。滤波器可以从原始的像素特征中抽取某些特征,如:边缘、角度、形状等。
如:
$ \mathbf K_x = \begin{bmatrix} -1&0&+1\\ -2&0&+2\\ -1&0&+1 \end{bmatrix}\quad \mathbf K_y = \begin{bmatrix} +1&+2&+1\\ 0&0&0\\ -1&-2&-1 \end{bmatrix} $sobel
算子:其中 $ MathJax-Element-103 $ 表示检测垂直边缘的滤波器,它沿着水平方向做卷积; $ MathJax-Element-104 $ 表示检测水平边缘的滤波器,它沿着垂直的方向做卷积。
下图所示为一张原始的灰度图:
经过 $ MathJax-Element-103 $ 卷积之后:
经过 $ MathJax-Element-104 $ 卷积之后:
实际上,在卷积神经网络中我们并不会手工设计卷积核,而是通过学习算法自动学得卷积核中每个位置的值。
1.2.2 输入填充
在卷积神经网络中,可以隐式地对输入填充零,使其得到加宽。
如果未填充零,则网络每一层的宽度会逐层递减。根据卷积的性质,网络每一层宽度减少的数量等于卷积核的宽度减1。
- 如果卷积核尺寸较大,则网络的宽度迅速缩减,这限制了卷积神经网络的网络深度。
- 如果卷积核尺寸较小,则可用的卷积核的数量大幅度降低,这限制了卷积神经网络的表达能力。
对输入 $ MathJax-Element-359 $ 有三种填充零的方式:
valid
填充、same
填充、full
填充。valid
填充:不使用零来填充输入,卷积核只允许访问那些图像中能完全包含整个核的位置。在
valid
填充模式中,输出的大小在每一层都缩减。假设核的宽度是 $ MathJax-Element-269 $ ,则每经过一层,输出的宽度减少了 $ MathJax-Element-265 $ 。如果输入图像的宽度是 $ MathJax-Element-117 $ ,则网络经过了 $ MathJax-Element-374 $ 层之后,输出的宽度变成 $ MathJax-Element-110 $ 。如果核的宽度 $ MathJax-Element-269 $ 非常大时,缩减非常明显。最终网络会缩减到 1 。
same
填充:使用足够的零来填充,使得输出和输入保持相同的大小。这是最常见的填充方式。在
same
填充模式中,网络可以包含任意多的卷积层,因为它不存在网络输出宽度缩减的问题。same
填充模式的一个问题是:输入的边缘单元可能存在一定程度上的欠表达。因为输入的中间区域的单元的影响域为全部的输出单元,这意味着这些输入单元的信息会被很多输出单元所编码。而输入的边缘区域的单元的影响域只是输出单元的一部分,这意味着这些输入单元的信息仅仅被少量输出单元所编码。
full
填充:在输入的两端各填充 $ MathJax-Element-265 $ 个零,使得每个输入单元都恰好被卷积核访问 $ MathJax-Element-269 $ 次。其中 $ MathJax-Element-269 $ 为卷积核的宽度。它将从卷积核和输入开始相交的时候开始做卷积。
假设核的宽度是 $ MathJax-Element-269 $ ,则每经过一层,输出的宽度增加了 $ MathJax-Element-265 $ 。
如果输入图像的宽度是 $ MathJax-Element-117 $ ,则网络经过了 $ MathJax-Element-374 $ 层之后,输出的宽度变成 $ MathJax-Element-119 $ 。
它使得输入的边缘单元也能够得到充分表达。
full
填充的一个问题是:输出的边界单元依赖于更少的输入单元。这使得学习到的结果在输出的中间部分表现较好,边缘部分的表现较差。
1.2.3 三维卷积
卷积神经网络的输入图片可以是二维(黑白图片),也可以是三维的(彩色图片)。
对于三维彩色图片,一个维度来表示不同的颜色通道(如红绿蓝),另外两个维度表示在每个通道上的空间坐标。
对于三维卷积:
假设输入为张量 $ MathJax-Element-359 $ ,每个元素是 $ MathJax-Element-121 $ 。其中: $ MathJax-Element-345 $ 表示输入单元位于 $ MathJax-Element-345 $ 通道, $ MathJax-Element-247 $ 表示通道中的坐标。
假设输出为张量 $ MathJax-Element-153 $ ,每个元素为 $ MathJax-Element-126 $ 。其中: $ MathJax-Element-345 $ 表示输出单元位于 $ MathJax-Element-345 $ 通道, $ MathJax-Element-247 $ 表示通道中的坐标。
注意:输出的通道数量通常与输入的通道数量不等。
输出有多个通道的原因是:使用了多个卷积核,每个卷积核会输出一个通道。
假设核张量为4维的张量 $ MathJax-Element-368 $ ,每个元素是 $ MathJax-Element-131 $ 。其中: $ MathJax-Element-345 $ 表示输出单元位于 $ MathJax-Element-345 $ 通道, $ MathJax-Element-248 $ 表示输入单元位于 $ MathJax-Element-248 $ 通道, $ MathJax-Element-247 $ 表示通道中的坐标。
则三维卷积可以表示为:
$ Z_{i,j,k}=\sum_l\sum_{m}\sum_{n}V_{l,j+m,k+n}K_{i,l,m,n} $其中:
- $ MathJax-Element-137 $ 遍历了图像平面上的所有坐标。
- $ MathJax-Element-138 $ 遍历了输入的所有通道。
- $ MathJax-Element-139 $ 是单个三维卷积的核,多个并行的核的卷积结果组成了输出的多个通道。
上述表述中,张量 $ MathJax-Element-359 $ 、 $ MathJax-Element-153 $ 的通道索引位于坐标索引之前,这称作通道优先
channel-first
。还有另一种模式:通道索引位于坐标索引之后,这称作
channel-last
。如:
tensorflow
框架采用channel-last
的模式,theano
框架采用channel-first
的模式。这里默认采用channel-last
的方式来描述。
1.2.4 降采样
如果对卷积层的输出进行降采样,则表示跳过图片中的一些位置。
- 优点:可以降低计算开销。因为它降低了卷积层的输出单元数量,也就降低了高层网络的输入单元数量。
- 缺点:提取的特征可能没有那么好,因为跳过的位置可能包含一些关键信息。
假设希望对输出的每个方向上,每隔 $ MathJax-Element-148 $ 个像素进行采样,则:
$ Z_{i,j,k}=\sum_l\sum_{m}\sum_{n}V_{l,j\times s+m,k\times s+n}K_{i,l,m,n} $这里 $ MathJax-Element-148 $ 称作降采样卷积的步幅。
可以对不同的方向定义不同的步幅。
假设 $ MathJax-Element-233 $ 方向的步幅为 $ MathJax-Element-145 $ , $ MathJax-Element-269 $ 方向的步幅为 $ MathJax-Element-147 $ , 则有:
$ Z_{i,j,k}=\sum_l\sum_{m}\sum_{n}V_{l,j\times s_1+m,k\times s_2+n}K_{i,l,m,n} $降采样卷积有两种实现形式:
- 通过直接实现步幅为
s
的卷积。 - 先进行完整的卷积,再降采样。这种做法会造成计算上的大量浪费,不建议采用。
- 通过直接实现步幅为
1.2.5 梯度计算
实现卷积神经网络时,为了能够学习模型,必须能够计算核的梯度。
在某些简单情况下,核的梯度可以通过卷积来实现;大多数情况下(如:步幅大于1时),核的梯度无法通过卷积来实现。
卷积是一种线性运算,所以可以表示成矩阵乘法形式,涉及的矩阵是卷积核的函数。
该矩阵有两个特性:该矩阵是稀疏的;卷积核的每个元素都复制到该矩阵的很多个位置。
假设要训练一个卷积神经网络,它包含步幅为 $ MathJax-Element-148 $ 的步幅卷积,卷积核为 $ MathJax-Element-368 $ ,作用于多通道的图像 $ MathJax-Element-359 $ 。则卷积输出为:
$ Z_{i,j,k}=\sum_l\sum_{m}\sum_{n}V_{l,j\times s+m,k\times s+n}K_{i,l,m,n} $假设需要最小化某个损失函数 $ MathJax-Element-151 $ ,则:
前向传播过程:计算 $ MathJax-Element-153 $ ,然后将 $ MathJax-Element-153 $ 传递到网络的其余部分来计算 $ MathJax-Element-154 $ 。
反向传播过程:假设得到一个张量 $ MathJax-Element-155 $ : $ MathJax-Element-156 $ 。为了训练网络,需要对过滤器的权重求导。
令 $ MathJax-Element-157 $ ,则有:
$ g(\mathbf G,\mathbf V,s)_{i,l,m,n}=\frac{\partial J}{\partial K_{i,l,m,n}} =\sum_{i^\prime}\sum_{j}\sum_{k}\frac{\partial J}{\partial Z_{i^\prime,j,k}}\frac{\partial Z_{i^\prime,j,k}}{\partial K_{i,l,m,n}} $根据 $ MathJax-Element-158 $ 的定义,有:
$ \frac{\partial Z_{i^\prime,j,k}}{\partial K_{i,l,m,n}}=\begin{cases} V_{l,j\times s+m,k\times s+n} ,& i^\prime=i\\ 0,& i^\prime\ne i \end{cases} $则有:
$ g(\mathbf G,\mathbf V,s)_{i,l,m,n}=\frac{\partial J}{\partial K_{i,l,m,n}}=\sum_j\sum_kG_{i,j,k}V_{l,j\times s+m,k\times s+n} $如果该层不是网络的输入层,则需要对 $ MathJax-Element-359 $ 求梯度来使得误差进一步反向传播。
令 $ MathJax-Element-160 $ , 则有:
$ h(\mathbf K,\mathbf G,s)_{l,j,k}=\frac{\partial J}{\partial V_{l,j,k}}=\sum_i\sum_{j^\prime}\sum_{k^\prime}\frac{\partial J}{\partial Z_{i,j^\prime,k^\prime}} \frac{\partial Z_{i,j^\prime,k^\prime}}{\partial V_{l,j,k}} $根据 $ MathJax-Element-161 $ 的定义,有:
$ \frac{\partial Z_{i,j^\prime,k^\prime}}{\partial V_{l,j,k}}= \sum_{\substack{m^\prime\\s.t. \; j^\prime\times s+m^\prime=j}}\sum_{\substack{n^\prime\\s.t.\; k^\prime\times s+n^\prime =k}} K_{i,l,m^\prime,n^\prime} $则有:
$ h(\mathbf K,\mathbf G,s)_{l,j,k}=\frac{\partial J}{\partial V_{l,j,k}} =\sum_i\sum_{j^\prime}\sum_{k^\prime}G_{i,j^\prime,k^\prime}\sum_{\substack{m^\prime\\s.t. \; j^\prime\times s+m^\prime=j}}\sum_{\substack{n^\prime\\s.t.\; k^\prime\times s+n^\prime =k}} K_{i,l,m^\prime,n^\prime} $.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论