3.1 神经网络概览
一个典型的logistic回归如上图所,但这是计算图,并不是神经网络图;
为了简化,假设是三维的即
,并将logistic回归画成神经网络图:
输入层由输入特征组成,也叫第0层,一般不计入神经网络层数,所以单个logistic回归就是单层神经网络,一般将输入层记为:
圆形叫做节点,一个节点包含了两种运算:
第一层运算:
第二层运算:
并且这个节点的输入是,输出是
;
方括号[]和它里面的数字表示了这是哪一层的参数;
不改变节点对应的计算,让它变得复杂一些:
第0层仍然是输入层;
第一层有三个节点,把这一层叫做隐藏层,如果层数更多,那么在输入层和输出层之间的所有层都叫隐藏层;第一层的三个节点都叫隐藏单元,每个节点都会带参数,并且特别的,会将第一层所有参数组合起来,用两个矩阵表示,分别是
;并且第一层的计算可以统一表示为:
第二层叫做输出层,所带参数也可用两个矩阵表示,并且输出层只有一个节点,第二层计入层数的计算,但不是隐藏层;它进行的计算可以写为:
最终将输出;我们只需要明白每一层有两个参数,这两个参数会经由训练不断学习调整,前一层的输出就是后一层的输入,就够了;至于
的细节,在后面会详细讨论;
下面是这个单隐层神经网络(也叫双层神经网络)的计算图:
不仅仅可以求在图上标示的导数,还可以求。
3.2 神经网络表示
为什么叫隐藏层?因为这些层的隐藏节点的参数我们并不知道,学习训练过程中它可能一直在不断调整,参数众多,我们没必要也不太可能完全知道每一个节点的参数;
在这个例子中,
是什么?
是一个
的矩阵,也可以说是一个4维列向量;
而则表示第一层从上往下数隐藏层第一个单元的激活函数值,
;
是什么?
这里表示
的转置矩阵,而
表示的就是隐藏层第一个节点所带的参数,实际上,
是一个3维列向量,我们可以将它表示为:
而也是如法炮制的:
而表示一个数,因此,计算后
也是实数;
是怎样产生的?
用这四个第一层的输出当作第二层的输入,进行计算:
当然这里由于第二层只有一个节点所以进行了一定的简化,并非说输出层就只能有一个节点,剧透一下比如softmax单元的输出层就会有多个节点,所以,如果严格书写最好还是要带右下角标,以表示它属于这一层从上往下数第几个单元:
这里是
的转置矩阵,而
是指第二层从上往下数第一个节点所带的参数,是一个4维列向量,写为:
而也是一个数;
和
是什么?
显然,是一个
矩阵,
是一个
矩阵;
如果上述没看懂,根本没关系,因为后面优化调整时并不是针对某一层的某个或某些节点去调整参数的,而是调整可以代表整一层的参数,比如第一层就是,第二层就是
……
事实上,这些矩阵的维度和当前层以及上一层的隐藏单元数、输出单元数、输入特征
的维度等都有着密切的联系,后面会给出一般通式,检查它们的维度往往能够debug。
3.3 计算神经网络的输出
对于,右上角方括号的角标代表它属于第
层
,右下角的角标代表它是层中从上往下数第几个节点的
;
前面的
是怎么计算的?
和
是什么?
是一个
矩阵,
是一个数;
为什么要写成
这样的形式?怎么将第一隐层当中的计算简化?
第一隐层中要计算的四个等式(上面已经给出),这四个等式能够通过
来用一个式子代替,这才是我们一直追求简洁地用
这样的表达的原因,说到底还是向量化;这个式子就是:
因为:
第一隐层还要计算四个等式,也向量化:
输出层做什么计算?
只有一个节点挺简单,做的计算也可按第一层的两个公式如法炮制: