深度学习系列一(DNN的网络结构)
DNN的网络结构
近两年深度学习不管是在科研领域还是工业界都非常火,其实深度学习相比之前的神经网络在理论上没什么区别,唯一区别可能是加了一个pretraining的过程而已。DNN(Deep neural network)是一种前馈人工神经网络,在输入与输出层之间包含了多于一层的隐含层。
废话少说。先从前馈人工神经网络开始讲起吧......
先对变量符号进行约定。$z$表示标量,$\mathbf{z}$表示向量,$\mathbf{Z}$表示矩阵。
以多类分类问题为例,假设$L(L\geqslant 2)$层神经网络,设$\mathbf{z}^l,1\leqslant l\leqslant L$表示第$l$层的变量,那么前后两层之间的关系为:$$\begin{align*}\mathbf{a}^{l+1}&=\mathbf{W}^l\mathbf{z}^l+\mathbf{b}^l\\\mathbf{z}^{l+1}&=f^{l+1}(\mathbf{a}^{l+1})\end{align*}$$这里当$1<l<L$时,$f^l(\cdot)$表示激励函数,当$l=L$的时候,$f^l(\cdot)$为softmax函数。我在这里为什么要搞一个中间变量$\mathbf{a}$出来呢?后续会有用的.Ok,上面的两个函数就表示了网络的前向传播。
激励函数常采用sigmoid函数:$$\mathbf{z}^l=f^l(\mathbf{a})\Leftrightarrow z_i^l=\frac{1}{1+\exp(-a_i^l)}$$
这个函数的导数比较有意思:$$\frac{\partial z_i^l}{\partial a_i^l}=(f^l(a_i^l))'=\frac{\exp(-a_i^l)}{(1+\exp(-a_i^l))^2}=z_i^{l}(1-z_i^{l})$$
softmax函数本质上是多类逻辑回归:$$\mathbf{z}^L=f^{L}(\mathbf{a}^{L})\Leftrightarrow z_i^L=\frac{\exp(a_i^{L})}{\sum_j\exp(a_j^{L})},$$ softmax函数的导数为:$$\frac{\partial z_i^L}{\partial a_j^{L}}=z_i^L(I_{ij}-z_j^L),$$这里$I_{ij}$表示单位矩阵的元素。为什么要知道这些导数呢?后续对网络参数求导时需要用到。
好了,DNN的网络结构已经讲完了,前向传播的形式也非常简单。附带地给出了sigmoid和softmax函数的一些性质。下次的内容涉及到DNN最核心的部分。DNN的有监督训练-后向传播算法(BP算法)。