1.非线性假设
当我们预测房价时,或许我们有100个特征向量来构造一个logistic回归函数,如果我们想包含所有的多项式,仅二项式就5000个,这显然不是一个好方法,而且因为项数过多,很有可能出现过拟合。但是如果舍弃太多的数据很有可能出现欠拟合。
所以学习复杂的非线性假设时,逻辑回归不是一个好方法,所以我们要学习神经网络。
2.模型展示
几个术语:
sigmoid(logistic)激活函数:非线性函数g(z),
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1
θ:模型的参数,模型的权重
神经网络是单个神经元连接在一起的集合:
第一层(Layer1):输入层,包含的是输入单元,在这一层输入特征
中间层(Layer2):隐藏层,非输入输出层的都是隐藏层,隐藏层的值在训练集中看不到,
最后层(Layer3):输出层,包含的是输出单元,在这一层的神经元输出假设的最终计算结果
黄
圈
神
经
元
中
的
a
i
(
j
)
:
第
j
层
第
i
个
神
经
元
的
激
活
项
,
所
谓
的
激
活
项
是
由
一
个
具
体
神
经
元
计
算
并
输
出
的
值
黄圈神经元中的a_i^{(j)}:第j层第i个神经元的激活项,所谓的激活项是由一个具体神经元计算并输出的值
黄圈神经元中的ai(j):第j层第i个神经元的激活项,所谓的激活项是由一个具体神经元计算并输出的值
θ
(
j
)
:
权
重
矩
阵
,
它
控
制
从
某
一
层
到
下
一
层
的
映
射
\theta^{(j)}:权重矩阵,它控制从某一层到下一层的映射
θ(j):权重矩阵,它控制从某一层到下一层的映射
在上图中 θ ( 1 ) \theta^{(1)} θ(1)就是控制从三个输入单元到三个隐藏单元的映射的参数矩阵,所以 θ ( 1 ) \theta^{(1)} θ(1)是一个3×4矩阵。
一般的,如果一个网络在第
j
j
j层有
s
j
s_j
sj个单元,在第
j
+
1
j+1
j+1层有
s
j
+
1
s_{j+1}
sj+1个单元,然后矩阵
θ
(
j
)
\theta^{(j)}
θ(j)即控制第j层到第j+1层映射的矩阵,它的维度为:
s
j
+
1
×
(
s
j
+
1
)
s_{j+1}×(s_j+1)
sj+1×(sj+1)
它一行就是一个j层单元到j+1层单元的全部映射
三个隐藏单元和输出层的计算公式如上图所示
3.模型展示Ⅱ(前向传播)
如上图,我们把三个画下划线的式子定义为:
z
1
(
2
)
z_1^{(2)}
z1(2),
z
2
(
2
)
z_2^{(2)}
z2(2),
z
3
(
2
)
z_3^{(2)}
z3(2)。
所以
a
1
(
2
)
a_1^{(2)}
a1(2)=
g
(
z
1
(
2
)
)
g(z_1^{(2)})
g(z1(2)),
a
2
(
2
)
a_2^{(2)}
a2(2)=
g
(
z
2
(
2
)
)
g(z_2^{(2)})
g(z2(2)),
a
3
(
2
)
a_3^{(2)}
a3(2)=
g
(
z
3
(
2
)
)
g(z_3^{(2)})
g(z3(2))。
ps:上标2表示这些值与第二层相关。
我们把这些表示为矩阵向量乘法,就像这样:
x
0
x_0
x0还是等于1。
我们让
a
(
1
)
=
x
a^{(1)}=x
a(1)=x,就是让
a
(
1
)
a^{(1)}
a(1)作为输入层,把x替换掉,
z
(
2
)
=
θ
(
1
)
a
(
1
)
z^{(2)}=\theta^{(1)}a^{(1)}
z(2)=θ(1)a(1),
a
(
2
)
=
g
(
z
(
2
)
)
a^{(2)}=g(z^{(2)})
a(2)=g(z(2))
计算
h
θ
(
x
)
h_\theta(x)
hθ(x)的过程称为前向传播,为什么这么说?因为我们从输入单元的激活项开始,然后进行前向传播给隐藏层,计算隐藏层的激活项然后我们继续向前传播,并计算出输出层的激活项。这个依次计算激活项,从输入层到隐藏层到输出层的过程叫前向传播,我们刚才推导出的是这一过程的向量化实现方法
如果我们把输入层遮住,写出激活函数,只观察式中的蓝色部分,它很像logistic模型,不同之处在于,这里是大写的θ。这个神经网络所做的事情就像是逻辑回归,但是它并不是使用原本的
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3作为特征,而是使用
a
1
(
2
)
,
a
2
(
2
)
,
a
3
(
2
)
a_1^{(2)},a_2^{(2)},a_3^{(2)}
a1(2),a2(2),a3(2)作为新特征。特征项
a
1
(
2
)
,
a
2
(
2
)
,
a
3
(
2
)
a_1^{(2)},a_2^{(2)},a_3^{(2)}
a1(2),a2(2),a3(2)它们是学习得到的函数输入值,通过
θ
(
1
)
\theta^{(1)}
θ(1)可以学习到各种各样的特征,也就可以得到一个更好的假设函数
4.例子与直觉理解Ⅰ
目标:通过一个详细的例子来说明神经网络是怎样计算复杂非线性函数的输入的
如上图,我们有两个特征
x
1
和
x
2
x_1和x_2
x1和x2,它们都是二进制的,所以取值为0或1,×表示正样本,⚪表示负样本,把左图看作右图的简化。我们想要学习一个非线性的判断边界,神经网络如何做到这些呢?
具体来说,我们需要计算目标函数:
y
=
x
1
X
O
R
x
2
y=x_1\ XOR\ x_2
y=x1 XOR x2
或:
y
=
x
1
X
N
O
R
x
2
y=x_1\ XNOR\ x_2
y=x1 XNOR x2
X
N
O
R
XNOR
XNOR是
N
O
T
(
x
1
X
O
R
x
2
)
NOT(x_1\ XOR\ x_2)
NOT(x1 XOR x2)的另一种写法。
X
O
R
XOR
XOR:异或。
X
N
O
R
XNOR
XNOR:同或
所以同或时当x1,x2相同时(图中的×),y=1。
为了建立能拟合XNOR的神经网络,我们先看一个拟合AND(逻辑与)运算的神经网络:
为了得到含单个神经元的网络来计算这个AND函数,加一个偏置单元,也称为+1单元。
我们为神经网络的参数赋值,如图中蓝色数字,一个-30两个+20。这意味着将-30赋值给x0的系数,对应图中的+1单元,+20对应x1,x2的系数。得到的假设函数为:
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)
画出sigmoid函数(
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1 )(图中右上角),z=4.6时,g(z)=0.99,z=-4.6时,g(z)=0.01。
我们把x1,x2代入(图中右下角的真值表),当
x
1
=
0
,
x
2
=
0
x_1=0,x_2=0
x1=0,x2=0时,
h
θ
(
x
)
≈
0
h_\theta(x)≈0
hθ(x)≈0,当
x
1
=
1
,
x
2
=
1
x_1=1,x_2=1
x1=1,x2=1时,
h
θ
(
x
)
≈
1
h_\theta(x)≈1
hθ(x)≈1,可以说
h
θ
(
x
)
≈
x
1
A
N
D
x
2
h_\theta(x)≈x_1\ AND\ x_2
hθ(x)≈x1 AND x2
实现或功能:
5.例子与直觉理解Ⅱ
实现逻辑非运算:
方法就是在参数面前放一个较大的负数作为权值。
实现异或运算:
方法就是把异或拆解:
x
1
X
N
O
R
x
2
=
(
x
1
A
N
D
x
2
)
O
R
(
(
N
O
T
x
1
)
A
N
D
(
N
O
T
x
2
)
)
x_1\ XNOR\ x_2=(x_1\ AND\ x_2)OR((NOT\ x_1)\ AND\ (NOT\ x_2))
x1 XNOR x2=(x1 AND x2)OR((NOT x1) AND (NOT x2))
神经网络每一层都计算出更加复杂的特征,在最后一层得出结果。
6.多元分类
四输出单元的神经网络:
整理一下: