目录
1. 初识神经网络(伟大的人工智能)
1.1 问题引出
- 线性回归和逻辑回归的缺点: 当特征值太多时,计算负荷会非常大,导致计算效率降低。所以,神经网络将完美的解决这一问题。
- 例如: 有100个特征值,需要希望用这100个特征来构建一个非线性的多项式模型,结果将是数量非常惊人的特征组合,即便我们只采用两两特征的组合:
x
1
x
2
+
x
2
x
3
+
x
3
x
4
+
.
.
.
.
.
.
+
x
99
x
100
x_1x_2+x_2x_3+x_3x_4+......+x_{99}x_{100}
x1x2+x2x3+x3x4+......+x99x100,也会有5000个组合而成的特征,这对于逻辑回归来说需要计算的特征太多。
1.2 e.g. 视觉对象识别模型(识别图片中的物体)
- 使用很多汽车的图片和很多非汽车的图片,再使用图片上的像素值(饱和度或亮度)来作为特征。只选用灰度图片(非RGB),每个像素则只有一个值,再选取图片上的两个不同位置上的两个像素,然后训练一个逻辑回归算法,利用这两个像素值来判断图片上是否是汽车:
采用 50x50 像素的小图片,并且将所有像素视为特征,则会有
2500 个特征,如果进一步将两两特征组合构成一个多项式模型,则会有约 250 0 2 / 2 2500^2/2 25002/2 个特征。普通的逻辑回归模型,不能有效地处理这么多的特征。所以,需要使用神经网络。
1.3 什么是神经网络?
神经网络的诞生是人们想尝试设计出模仿大脑的算法(人脑是最好的学习机器)。假设:大脑做所有事情和不同的方法,不需要用上千个不同的程序去实现。相反,大脑处理的方法,只需要一个单一的学习算法就可以了。因为人体有同一块脑组织可以处理光、声或触觉信号,那么也许存在一种学习算法(而不是成千上万种算法),可以同时处理视觉、听觉和触觉。
2. 模型表示
-
神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。如一个类似于神经元的神经网络:
x 1 , x 2 , x 3 x_1, x_2, x_3 x1,x2,x3 是输入单元,将原始数据输入给它们。
a 1 , a 2 , a 3 a_1, a_2, a_3 a1,a2,a3 是中间单元,负责数据的处理,然后呈递到下一层。
最后是输出单元,它负责计算 h θ ( x ) h_\theta(x) hθ(x)。 -
神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。第一层作为输入层(Input Layer),中间一层成为隐藏层(Hidden Layers),最后一层称为输出层(Output Layer)。并且为每一层都增加一个偏差单位(bias unit):
模型介绍:
a i ( j ) a_i^{(j)} ai(j):代表第𝑗 层的第 𝑖 个激活单元。
θ ( j ) \theta(j) θ(j):代表从第 𝑗 层映射到第𝑗 + 1 层时的权重矩阵,例如,𝜃(1)代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第 𝑗 + 1层的激活单元数量为行数,以第 𝑗 层的激活单元数加一为列数的矩阵。例如,上图的神经网络中 θ ( 1 ) \theta(1) θ(1) 的尺寸为 3 * 4。
激活单元和输出分别表达为:
权重矩阵:
所以,每一个 𝑎 都是由上一层所有的 𝑥 和每一个 𝑥 所对应的决定的,所以这种从左到右的算法称为前向传播算法( FORWARD PROPAGATION )
把 𝑥, 𝜃, 𝑎 分别用矩阵表示,我们可以得到 𝜃 ⋅ 𝑋 = 𝑎 :
3. 前向传播算法的向量化计算
首先,神经网络第二层的计算:
再令 𝑧(2) =
θ
(
1
)
\theta^{(1)}
θ(1)𝑥,则 𝑎(2) = 𝑔(
𝑧
(
2
)
𝑧^{(2)}
z(2)) ,计算后添加
𝑎
0
(
2
)
=
1
𝑎_0^{(2)} = 1
a0(2)=1:
前向传播算法:
综上所得, a n = g ( θ n − 1 a n − 1 ) a^n=g(\theta^{n-1}a^{n-1}) an=g(θn−1an−1),n:表示第 n 层。
注意: 如果要对整个训练集进行计算,需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。如:
4.神经网络的特征
4.1 逻辑回归和神经网络的特征值对比
神经网络能够通过学习得出其自身的一系列新特征:
- 在逻辑回归中,模型被限制在原始特征X中,虽然可以使用二项式项来组合这些特征(如,两两组合),但是模型仍然受到原始特征的限制。
- 在神经网络中,原始特征只是输入层,输出层做出的预测利用的是第二层的特征,而非输入层中的原始特征,可以认为第二层中的特征是神经网络通过学习后自己得出的一系列用于预测输出变量的新特征。
4.2 神经网络中的逻辑运算
单层神经元(无中间层)的计算可用来表示 逻辑运算(AND、OR)
-
逻辑与(AND):
若假设 θ 0 = − 30 , θ 1 = 20 , θ 2 = 20 \theta_0=-30,\theta_1=20,\theta_2=20 θ0=−30,θ1=20,θ2=20 ,则输出函数为: h θ ( x ) = g ( − 30 + 20 x 1 + 20 x 2 ) h_\theta^{(x)}=g(-30+20x_1+20x_2) hθ(x)=g(−30+20x1+20x2)
即z为正,则为真;z为负,则为假
综上可得,AND 函数: h θ ( x ) h_\theta^{(x)} hθ(x) ≈ x 1 A N D x 2 x_1 AND x_2 x1ANDx2 -
逻辑或(OR):
假设 θ 0 = − 10 , θ 1 = 20 , θ 2 = 20 \theta_0=-10,\theta_1=20,\theta_2=20 θ0=−10,θ1=20,θ2=20
5. 神经网络的样本
当输入特征为布尔值(0 或 1)时,可以用一个单一的激活层可以作为逻辑运算符,为了表示不同的运算符,只需要选择不同的权重。
-
逻辑与(AND):两个数字同时为1,结果才为1;
-
逻辑或(OR):只要有一个数字为1,结果就为1;
-
逻辑非(XOR):两个数不同为1,相同为0;
-
逻辑同或(XNOR):相同为1,不同为0; 即 X N O R = ( x 1 A N D x 2 ) O R ( ( N O T x 1 ) A N D ( N O T x 2 ) ) XNOR=(x_1 AND x_2)OR((NOT x_1)AND(NOT x_2)) XNOR=(x1ANDx2)OR((NOTx1)AND(NOTx2))
首先构造出表达 ( ( N O T x 1 ) A N D ( N O T x 2 ) ) ((NOT x_1)AND(NOT x_2)) ((NOTx1)AND(NOTx2))部分的神经元:
XNOR 运算符实现:
Andrew NG给出的图片:
按这种方法我们可以逐渐构造出越来越复杂的函数,也能得到更加厉害的特征值。这就是神经网络的厉害之处!
6. 神经网络中的多分类
例如,训练一个神经网络算法来识别路人(pedestrian)、汽车(car)、摩托车(motorcycle)和卡车(truck),在输出层我们应该有 4 个值。例如,第一个值为 1 或 0 用于预测是否是行人,第二个值用于判断是否为汽车。
输入向量 𝑥 有三个维度,两个中间层,输出层 4 个神经元分别用来表示 4 类,也就是每一个数据在输出层都会出现 [𝑎 𝑏 𝑐 𝑑]𝑇,且 𝑎, 𝑏, 𝑐, 𝑑 中仅有一个为 1,表示当前类。下面是该神经网络的结构:
神经网络算法的输出结果为四种可能情形之一: