1.神经网络引入
无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大。
举例:
假设我们希望训练一个模型来识别视觉对象(例如识别一张图片上是否是一辆汽车),一种方法是我们利用很多汽车的图片和很多非汽车的图片,然后利用这些图片上一个个像素的值(饱和度或亮度)来作为特征。
假如我们只选用灰度图片,每个像素则只有一个值(而非 RGB 值),我们可以选取图片上的两个不同位置上的两个像素,然后训练一个逻辑回归算法利用这两个像素的值来判断图片上是否是汽车:
假使我们采用的都是 50x50 像素的小图片,并且我们将所有的像素视为特征,则会有2500 个特征,如果我们要进一步将两两特征组合构成一个多项式模型,则会有约25002/2个(接近 3 百万个)特征。普通的逻辑回归模型,不能有效地处理这么多的特征,这时候我们需要神经网络。
2.神经网络介绍
神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个 3 层的神经网络,第一层成为输入层,最后一层称为输出层,中间一层成为隐藏层。
其中1, 2, 3是输入单元,x0为偏置,我们将原始数据输入给它们。1, 2, 3是中间单元,它们负责将数据进行处理,然后通过激活函数之后呈递到下一层。最后是输出单元,它负责计算ℎ()。
这里的激活函数还是逻辑回归中提到的sigmod函数,它的输出值永远在 0 到 1 之间,同时使得神经网络由线性变换到非线性变换:
a i ( j ) a_{i}^{(j)} ai(j) 代表第 j 层的第 i 个激活单元。 θ ( j ) \theta^{(j)} θ(j) 代表从第 j 层映射到第 j+1 层时的权重的矩阵, 例如 θ ( 1 ) \theta^{(1)} θ(1) 代表从第一层映射到第二层的权重的矩阵。其尺寸为: 以第 j+1 层的激活单元数量为行数, 以第 j 层的激活单元数加一为列数的矩阵。例如: 上图所示的神经网络中 θ ( 1 ) \theta^{(1)} θ(1) 的尺寸为 (下一层)3 ∗ 4 ^{*} 4 ∗4(当前层) 。
所以前向传播的结果为:
a 1 ( 2 ) = g ( Θ 10 ( 1 ) x 0 + Θ 11 ( 1 ) x 1 + Θ 12 ( 1 ) x 2 + Θ 13 ( 1 ) x 3 ) a 2 ( 2 ) = g ( Θ 20 ( 1 ) x 0 + Θ 21 ( 1 ) x 1 + Θ 22 ( 1 ) x 2 + Θ 23 ( 1 ) x 3 ) a 3 ( 2 ) = g ( Θ 30 ( 1 ) x 0 + Θ 31 ( 1 ) x 1 + Θ 32 ( 1 ) x 2 + Θ 33 ( 1 ) x 3 ) h θ ( x ) = g ( Θ 10 ( 2 ) a 0 ( 2 ) + Θ 11 ( 2 ) a 1 ( 2 ) + Θ 12 ( 2 ) a 2 ( 2 ) + Θ 13 ( 2 ) a 3 ( 2 ) ) a_{1}^{(2)}=g\left(\Theta_{10}^{(1)} x_{0}+\Theta_{11}^{(1)} x_{1}+\Theta_{12}^{(1)} x_{2}+\Theta_{13}^{(1)} x_{3}\right) \\ a_{2}^{(2)}=g\left(\Theta_{20}^{(1)} x_{0}+\Theta_{21}^{(1)} x_{1}+\Theta_{22}^{(1)} x_{2}+\Theta_{23}^{(1)} x_{3}\right) \\ a_{3}^{(2)}=g\left(\Theta_{30}^{(1)} x_{0}+\Theta_{31}^{(1)} x_{1}+\Theta_{32}^{(1)} x_{2}+\Theta_{33}^{(1)} x_{3}\right) \\ h_{\theta}(x)=g\left(\Theta_{10}^{(2)} a_{0}^{(2)}+\Theta_{11}^{(2)} a_{1}^{(2)}+\Theta_{12}^{(2)} a_{2}^{(2)}+\Theta_{13}^{(2)} a_{3}^{(2)}\right) a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)hθ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
通过矩阵表示为:
3.神经网络举例(前向传播)
先通过与和与非运算,再通过或运算
4.多分类
输入向量有三个维度,两个中间层,输出层 4 个神经元分别用来表示 4 类,也就是每一个数据在输出层都会出现[ ],且, , , 中仅有一个为 1,表示当前类。下面是该神经网络的可能结构示例: