一、监督学习和无监督学习
什么是监督学习?
就是我们给学习算法一个数据集。这个数据集由“正确答案”组成,然后运用学习算法,算出更多的正确答案。
监督学习包括:回归、分类
什么是回归?
回归这个词的意思是,我们在试着推测出这一系列连续值属性。即通过回归来推出一个连续的输出。
什么是分类?
分类指的是,我们试着推测出离散的输出值:比如0 或 1 良性或恶性,而事实上在分类问题中,输出可能不止两个值。目标是推出一组离散的结果。
什么是无监督学习?
无监督学习中没有任何的标签或者是有相同的标签或者就是没标签。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。别的都不知道,就是一个数据集。针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。这是一个,那是另一个,二者不同。是的,无监督学习算法可能会把这些数据分成两个不的簇。所以叫做聚类算法。
二、单变量线性回归
1.模型表示
举个例子:根据已知一个数据集包含房子面积和价格,再根据新的面积推算价格。一种可能的表达方式为:
h θ ( x ) = θ 0 + θ 1 x , h_{\theta}(x)=\theta_{0}+\theta_{1} x, hθ(x)=θ0+θ1x,
因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。
2.代价函数
代价函数,也称为平方误差函数,用来描述预测值与实际值的差距。公式如下:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left(\theta_{0},\theta_{1}\right)=\frac{1}{2 m}\sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} J(θ0,θ1)=2m1∑i=1m(hθ(x(i))−y(i))2
其实就是,误差的平方再求平均值,为什么是除2m?老吴说这么做方便以后计算。
个人理解:
两个θ是我们给出的代价函数的参数,确定了不同的回归参数,就会得到不同的代价函数值。我们希望代价函数越小越好。
直观理解,上面给出的代价函数可以如图所示,曲面上的最低点就是代价函数值最小的点。
3.梯度下降
梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数 J ( θ 0 , θ 1 ) J\left(\theta_{0},\theta_{1}\right) J(θ0,θ1)的最小值。
梯度下降的思想是:开始时我们随机选择一个参数的组合,计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。算法公式如下:
θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_{j}:=\theta_{j}-\alpha\frac{\partial}{\partial\theta_{j}} J(\theta) θj:=θj−α∂θj∂J(θ)
公式含义:给θ选取一组初始值,然后带入公式求出新的一组参数,不断重复。求偏导是因为按着这个方向走,代价函数的变化速度最快。α 是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大。
所以如果a太小,可能会很慢,它会需要很多步才能到达全局最低点。
如果a太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛.
当人们谈到梯度下降时,他们的意思就是同步更新。具体实现如下:
temp0 : = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) temp1 : = θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) θ 0 : = temp0 θ 1 : = temp1 \begin{array}{l} \text{temp0} := \theta_0 - \alpha \frac{\partial}{\partial\theta_0} J(\theta_0, \theta_1) \\ \text{temp1} := \theta_1 - \alpha \frac{\partial}{\partial\theta_1} J(\theta_0, \theta_1) \\ \theta_0 := \text{temp0} \\ \theta_1 := \text{temp1} \end{array} temp0:=θ0−α∂θ0∂J(θ0,θ1)temp1:=θ1−α∂θ1∂J(θ0,θ1)θ0:=temp0θ1:=temp1
随着梯度下降法的运行,你移动的幅度会自动变得越来越小,直到最终移动幅度非常小,你会发现已经收敛到局部极小值。当我们已经达到局部最低点,结果是局部最优点的导数将等于零。这意味着你已经在局部最优点,继续梯度下降法更新等于什么都没做,它不会改变参数的值。
4.梯度下降的线性回归
我们把线性回归的代价函数
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J\left(\theta_{0},\theta_{1}\right)=\frac{1}{2 m}\sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}
J(θ0,θ1)=2m1∑i=1m(hθ(x(i))−y(i))2
带入到梯度下降的公式中
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
\theta_{j}:=\theta_{j}-\alpha\frac{\partial}{\partial\theta_{j}} J(\theta)
θj:=θj−α∂θj∂J(θ),
得到公式如下:
∂ ∂ θ j J ( θ θ θ l ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \frac{\partial}{\partial\theta_{j}} J\left(\theta_{\theta}\theta_{l}\right)=\frac{\partial}{\partial\theta_{j}}\frac{1}{2 m}\sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} ∂θj∂J(θθθl)=∂θj∂2m1∑i=1m(hθ(x(i))−y(i))2
即
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_\theta \left( x^{(i)} \right) - y^{(i)} \right) θ0:=θ0−αm1∑i=1m(hθ(x(i))−y(i))
θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) ) \theta_1 := \theta_1 - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( \left( h_\theta \left( x^{(i)} \right) - y^{(i)} \right) \cdot x^{(i)} \right) θ1:=θ1−αm1∑i=1m((hθ(x(i))−y(i))⋅x(i))
三、多变量线性回归
1.多维特征
支持多变量的假设 h 表示为:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n h_{\theta}(x) = \theta_{0} + \theta_{1} x_{1} + \theta_{2} x_{2} + \ldots + \theta_{n} x_{n} hθ(x)=θ0+θ1x1+θ2x2+…+θnxn
这个公式中有 n+1 个参数和 n 个变量,为了使得公式能够简化一些,引入x0=1,则公式转化为:
h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n h_{\theta}(x) = \theta_{0}x_{0} + \theta_{1}x_{1} + \theta_{2}x_{2} + \ldots + \theta_{n}x_{n} hθ(x)=θ0x0+θ1x1+θ2x2+…+θnxn
此时模型中的参数是一个 n+1 维的向量,任何一个训练实例也都是 n+1 维的向量,特征矩阵 X 的维度是 m*(n+1)。 因此公式可以简化为:
h θ ( x ) = θ T X h_{\theta}(x) = \theta^T X hθ(x)=θTX
2.多变量梯度下降
我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。
θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 , … , θ n ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta_0, \theta_1, \ldots, \theta_n) θj:=θj−α∂θj∂J(θ0,θ1,…,θn)
即:
θ j : = θ j − α ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} \frac{1}{2m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)})^2 θj:=θj−α∂θj∂2m1∑i=1m(hθ(x(i))−y(i))2
3.特征缩放
在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。解决的方法是尝试将所有特征的尺度都尽量缩放到-1 到 1 之间。
最简单的方法是
x n = x n − μ n s n x_{n} = \frac{x_{n} - \mu_{n}}{s_{n}} xn=snxn−μn
其中 μ n \mu_{n} μn 是平均值, s n s_{n} sn 是标准差
4.学习率
梯度下降算法的每次迭代受到学习率的影响,如果学习率 α 过小,则达到收敛所需的迭
代次数会非常高;如果学习率 α 过大,每次迭代可能不会减小代价函数,可能会越过局部最
小值导致无法收敛。
通常可以考虑尝试些学习率:
α=0.01,0.03,0.1,0.3,1,3,10
5.多项式回归
线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 h_{\theta}(x) = \theta_{0} + \theta_{1} x_{1} + \theta_{2} x_{2}^{2} hθ(x)=θ0+θ1x1+θ2x22
或者三次方模型:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 h_{\theta}(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2^2 + \theta_3 x_3^3 hθ(x)=θ0+θ1x1+θ2x22+θ3x33
注:如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。
四、逻辑回归
1.表达式
在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误),我们将学习一种叫做逻辑回归 (LogisticRegression) 的算法,这是目前最流行使用最广泛的一种学习算法。
这个算法的性质是:它的输出值永远在 0 到 1 之间。
首先我们定义一个Sigmoid函数(激活函数)
g
(
z
)
=
1
1
+
e
−
z
g(z) = \frac{1}{1 + e^{-z}}
g(z)=1+e−z1 ,来将任意实数值映射到0和1之间
把他与特征向量的相结合,得到 h θ ( x ) = g ( θ T X ) h_{\theta}(x) = g(\theta^T X) hθ(x)=g(θTX) ,整理得到 h θ ( x ) = 1 1 + e − θ T x h_{\theta}(x) = \frac{1}{1 + e^{-\theta^T x}} hθ(x)=1+e−θTx1
h θ ( x ) h_{\theta}(x) hθ(x) 的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1 的可能性(estimated probablity)
即 h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_{\theta}(x) = P(y = 1 \mid x; \theta) hθ(x)=P(y=1∣x;θ)
例如,如果对于给定的 x,通过已经确定的参数计算得出 hθ(x)=0.7,则表示有 70%的几
率 y 为正向类,相应地 y 为负向类的几率为 1-0.7=0.3。
2.判定边界
在逻辑回归中,我们预测:
当
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 大于等于 0.5 时,预测 y=1。
当
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 小于 0.5 时,预测 y=0 。
有些模型可以用直线作为分界线,有些模型可以用曲线作为分界线
我们可以用非常复杂的模型来适应非常复杂形状的判定边界。
3.代价函数
我们重新定义逻辑回归的代价函数为:
J ( θ ) = 1 m ∑ i = 1 m Cost ( h θ ( x ( i ) ) , y ( i ) ) J(\theta) = \frac{1}{m} \sum_{i=1}^{m} \operatorname{Cost}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right) J(θ)=m1∑i=1mCost(hθ(x(i)),y(i))
其中
Cost ( h θ ( x ) , y ) = { − log ( h θ ( x ) ) if y = 1 − log ( 1 − h θ ( x ) ) if y = 0 \text{Cost}(h_{\theta}(x), y) = \begin{cases} -\log(h_{\theta}(x)) & \text{if } y = 1 \\ -\log(1 - h_{\theta}(x)) & \text{if } y = 0 \end{cases} Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))if y=1if y=0
这个函数的特点是:
当实际的 y=1 且
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 也为 1 时误差为0,当 y=1 但
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 不为 1 时误差随着
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 的变小而变大;
当实际的 y=0 且
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 也为 0 时代价为 0,当 y=0 但
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 不为 0 时误差随着
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 的变大而变大。
这个函数可以简化如下:
Cost ( h θ ( x ) , y ) = − y × log ( h θ ( x ) ) − ( 1 − y ) × log ( 1 − h θ ( x ) ) \text{Cost}(h_{\theta}(x), y) = -y \times \log(h_{\theta}(x)) - (1 - y) \times \log(1 - h_{\theta}(x)) Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x))
带入到代价函数中得到:
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_{\theta}(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_{\theta}(x^{(i)})) \right] J(θ)=−m1∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
再利用梯度下降法 θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_{j}:=\theta_{j}-\alpha\frac{\partial}{\partial\theta_{j}} J(\theta) θj:=θj−α∂θj∂J(θ) 求解化简,最终得到:
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) x_j^{(i)} θj:=θj−αm1∑i=1m(hθ(x(i))−y(i))xj(i)
我们发现形式上与线性回归的代价函数一样,但也只是形式相同,跟线性回归的梯度下降实际上是两个完全不同的东西。
除了梯度下降法,常见的求最小代价函数方法还有 共轭梯度法 BFGS (变尺度法) 和 L-BFGS (限制变尺度法)
4.多类别分类:一对多
我用三种不同的符号来代表三个类别,问题就是给出三个类型的数据集,我们如何得到一个学习算法来进行分类呢?
有时这个方法也被称为"一对余"方法,将其分成三个二元分类问题。
为了能实现这样的转变,我们将多个类中的一个类标记为正向类(y=1),然后将其他所有类都标记为负向类。接着,类似地第我们选择另一个类标记为正向类(y=2),再将其它类都标记为负向类,依此类推。
我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。无论 i 值是多少,我们都有最高的概率值,我们预测 y 就是那个值。
五、正则化
1.过拟合问题
回归问题中的过拟合
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;
第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;
第二个模型似乎最合适。
分类问题中的过拟合
如何解决过拟合问题?
- 丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如 PCA)
- 正则化。 保留所有的特征,但是减少参数的大小(magnitude)。
2.代价函数
我们可以从之前的事例中看出,正是那些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于 0 的话,我们就能很好的拟合了。因此将代价函数进行修改,来减小高次项的特征带来的影响。
J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta) = \frac{1}{2m} \left[ \sum_{i=1}^{m} \left( h_{\theta}(x^{(i)}) - y^{(i)} \right)^2 + \lambda \sum_{j=1}^{n} \theta_j^2 \right] J(θ)=2m1[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2]
其中 λ ∑ j = 1 n θ j 2 \lambda \sum_{j=1}^{n} \theta_j^2 λ∑j=1nθj2 的作用是对所有特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。λ称又称为正则化参数,通常不对 θ 0 \theta_{0} θ0 进行惩罚。优化后的如图所示
λ也不宜过大,否则将导致模型变成
h
θ
(
x
)
=
θ
0
h_{\theta}(x) = \theta_{0}
hθ(x)=θ0 ,变成一条平行x轴的直线,造成欠拟合
3.正则化线性回归
由于没有对 θ 0 \theta_{0} θ0 进行正则化,因此梯度下降算法要分情况进行:
θ 0 : = θ 0 − a 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x 0 ( i ) \theta_0 := \theta_0 - a \frac{1}{m} \sum_{i=1}^{m} [h_{\theta}(x^{(i)}) - y^{(i)}] x_0^{(i)} θ0:=θ0−am1∑i=1m[hθ(x(i))−y(i)]x0(i)
θ j : = θ j − a 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) + λ m θ j \theta_j := \theta_j - a \frac{1}{m} \sum_{i=1}^{m} [h_{\theta}(x^{(i)}) - y^{(i)}] x_j^{(i)} + \frac{\lambda}{m} \theta_j θj:=θj−am1∑i=1m[hθ(x(i))−y(i)]xj(i)+mλθj
对 θ j \theta_{j} θj 进行调整得到:
θ j : = θ j ( 1 − a λ m ) − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_{j} := \theta_{j} \left(1 - a \frac{\lambda}{m}\right) - a \frac{1}{m} \sum_{i=1}^{m} \left(h_{\theta}(x^{(i)}) - y^{(i)}\right) x_{j}^{(i)} θj:=θj(1−amλ)−am1∑i=1m(hθ(x(i))−y(i))xj(i)
可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令值减少了一个额外的值。
4.正则化逻辑回归
通过计算,逻辑回归的正则化结果看起与线性回归一样:
θ 0 : = θ 0 − a 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x 0 ( i ) \theta_0 := \theta_0 - a \frac{1}{m} \sum_{i=1}^{m} [h_{\theta}(x^{(i)}) - y^{(i)}] x_0^{(i)} θ0:=θ0−am1∑i=1m[hθ(x(i))−y(i)]x0(i)
θ j : = θ j − a 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) + λ m θ j \theta_j := \theta_j - a \frac{1}{m} \sum_{i=1}^{m} [h_{\theta}(x^{(i)}) - y^{(i)}] x_j^{(i)} + \frac{\lambda}{m} \theta_j θj:=θj−am1∑i=1m[hθ(x(i))−y(i)]xj(i)+mλθj
但是要注意,他们并不一样,因为
h θ ( x ) = g ( θ T X ) h_{\theta}(x) = g(\theta^T X) hθ(x)=g(θTX)
六、神经网络(Neural Networks)
1.非线性假设
线性回归和逻辑回归有个共同的缺点,就是当特征很多时计算负荷会非常大,他们并不适合处理这么多的特征,这时候我们需要用到神经网络。
2.模型表示
神经网络模型参考神经元建立,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。在神经网络中,参数又可被成为权重(weight)。
我们设计出了类似于神经元的神经网络,效果如下:
其中x123是输入单元(input units),我们将原始数据输入给它们。a123是中间单元,它们负责将数据进行处理,然后呈递到下一层。最后是输出单元,它负责计算
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 。
我们称第一层为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。
对于上图所示的模型,激活单元和输出分别表达为:
a
1
(
2
)
=
g
(
Θ
10
(
1
)
x
0
+
Θ
11
(
1
)
x
1
+
Θ
12
(
1
)
x
2
+
Θ
13
(
1
)
x
3
)
a_1^{(2)} = g(\Theta_{10}^{(1)} x_0 + \Theta_{11}^{(1)} x_1 + \Theta_{12}^{(1)} x_2 + \Theta_{13}^{(1)} x_3)
a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)
a
2
(
2
)
=
g
(
Θ
20
(
1
)
x
0
+
Θ
21
(
1
)
x
1
+
Θ
22
(
1
)
x
2
+
Θ
23
(
1
)
x
3
)
a_2^{(2)} = g(\Theta_{20}^{(1)} x_0 + \Theta_{21}^{(1)} x_1 + \Theta_{22}^{(1)} x_2 + \Theta_{23}^{(1)} x_3)
a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
a
3
(
2
)
=
g
(
Θ
30
(
1
)
x
0
+
Θ
31
(
1
)
x
1
+
Θ
32
(
1
)
x
2
+
Θ
33
(
1
)
x
3
)
a_3^{(2)} = g(\Theta_{30}^{(1)} x_0 + \Theta_{31}^{(1)} x_1 + \Theta_{32}^{(1)} x_2 + \Theta_{33}^{(1)} x_3)
a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
h
(
x
)
=
g
(
Θ
10
(
2
)
a
0
(
2
)
+
Θ
11
(
2
)
a
1
(
2
)
+
Θ
12
(
2
)
a
2
(
2
)
+
Θ
13
(
2
)
a
3
(
2
)
)
h(x) = g(\Theta_{10}^{(2)} a_0^{(2)} + \Theta_{11}^{(2)} a_1^{(2)} + \Theta_{12}^{(2)} a_2^{(2)} + \Theta_{13}^{(2)} a_3^{(2)})
h(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
a i ( j ) a_i^{(j)} ai(j) 代表第 j 层的第 i 个激活单元。 θ ( j ) \theta^{(j)} θ(j) 代表从第 j 层映射到第 j+1 层时的权重的矩阵,例如 θ ( 1 ) \theta^{(1)} θ(1) 代表从第一层映射到第二层的权重的矩阵。
举例:第一组数据 x123 与 Θ \Theta Θ 的第一行数据(权重)进行内积并传递给下一层,计算得到第一个激活单元 a 1 a_1 a1 ,因此一个激活单元,对应一行 Θ \Theta Θ 数据, Θ \Theta Θ 每行的权重都不相同,这样能得到更加丰富的特征。
上述公式中,输入层只有一组数据x123进入,实际上将会有很多组数据输入,因此输入的数据也是一个矩阵 X,每个列向量表示X 的一组数据。上述公式可以简单表述为 θ ⋅ X = a \theta \cdot X = a θ⋅X=a
用向量详细表示为
这些更高级的特征值远比仅仅将 x 次方厉害,也能更好的预测新数据。这就是神经网络相比于逻辑回归和线性回归的优势。
3.逻辑运算
神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑 AND、逻辑或 OR 。
我们可以用这样的一个神经网络表示 AND 函数:
x
1
,
x
2
∈
{
0
,
1
}
x_1, x_2 \in \{0, 1\}
x1,x2∈{0,1}
y
=
x
1
AND
x
2
y = x_1 \text{ AND } x_2
y=x1 AND x2
其中,
θ
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\left(-30 + 20x_1 + 20x_2\right) hθ(x)=g(−30+20x1+20x2)
已知 g ( x ) g(x) g(x) 的图像为
列出真值表,即可得到
因此我们得到:
h
θ
(
x
)
≈
x
1
AND
x
2
h_{\theta}(x) \approx x_1 \text{ AND } x_2
hθ(x)≈x1 AND x2
同理可以得到逻辑或OR,只需要改变权值即可
逻辑非
更加复杂的逻辑运算: X N O R = ( x 1 AND x 2 ) OR ( ( NOT x 1 ) AND ( NOT x 2 ) ) XNOR = \left(x_1 \text{ AND } x_2\right) \text{ OR } \left(\left(\text{NOT } x_1\right) \text{ AND } \left(\text{NOT } x_2\right)\right) XNOR=(x1 AND x2) OR ((NOT x1) AND (NOT x2))
4.多分类
当需要进行多分类的时候,我们的输出层可以不止一个,例如
这四个输出均为0或1,对应四个分类,其中仅有1个输出为1,表示这是当前类
七、神经网络的学习
1.代价函数
假设神经网络的训练样本有 m 个,每个包含一组输入 x 和一组输出信号 y,L 表示神经网络层数, S I S_{I} SI 表示每层的 neuron 个数(SL 表示输出层神经元个数), S L S_{L} SL 代表最后一层中处理单元的个数。
将神经网络的分类定义为两种情况:二类分类和多类分类,
二类分类:
S
L
=
0
S_{L}=0
SL=0 ,y=0 or 1 表示哪一类;
K 类分类:
S
L
=
K
S_{L}=K
SL=K ,
y
i
=
1
y_{i}=1
yi=1 表示分到第 i 类;(K > 2)
多分类的输出结果是一个K维度的向量,对于每一行特征,我们都会给出K 个预测,然后在利用循环在 K 个预测中选择可能性最高的一个,将其与 y 中的实际数据进行比较。
代价函数为:
J ( Θ ) = − 1 m [ ∑ i = 1 m ∑ k = 1 K y k ( i ) log ( h Θ ( x ( i ) ) ) k + ( 1 − y k ( i ) ) log ( 1 − ( h Θ ( x ( i ) ) ) k ) ] + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( Θ j i ( l ) ) 2 J(\Theta) = -\frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{k=1}^{K} y_k^{(i)} \log(h_{\Theta}(x^{(i)}))_k + (1 - y_k^{(i)}) \log(1 - (h_{\Theta}(x^{(i)}))_k) \right] + \frac{\lambda}{2m} \sum_{l=1}^{L-1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}} (\Theta_{ji}^{(l)})^2 J(Θ)=−m1[∑i=1m∑k=1Kyk(i)log(hΘ(x(i)))k+(1−yk(i))log(1−(hΘ(x(i)))k)]+2mλ∑l=1L−1∑i=1sl∑j=1sl+1(Θji(l))2
比逻辑回归更复杂一些,其实主要相差在神经网络有多个层,且输出多维向量。
第一部分是交叉熵损失,m为每次输入样本数量,K为输出的数量
第二部分是正则化项,每层含义为
- 最外层求和,这一层求和遍历神经网络的所有隐藏层。 L L L 是网络的总层数, L − 1 L−1 L−1 表示从第一层到倒数第二层的所有隐藏层,因为输出层通常不包括在正则化中。
- 中间层求和,对于每一层 l l l,这一层求和遍历该层的所有神经元。 S l S_{l} Sl是第 l l l 层的神经元数量。
- 内层求和,对于每一层 l l l 中的每个神经元 i i i ,这一层求和遍历该神经元与下一层 l + 1 l+1 l+1 中所有神经元之间的连接权重。 S l + 1 S_{l+1} Sl+1 是第 l + 1 l+1 l+1 层的神经元数量。
2.反向传播算法
太麻烦了,不太好形容,日后在写这里