第一章
1.1 什么是机器学习?
定义: 机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。
解释: 计算机程序从经验E中学习,解决某一任务T,进行某一性能度量P,通过P测定在T上的表现因经验E而提高。
例如: 跳棋游戏
E: 程序与自己下几万次跳棋
T: 玩跳棋
P: 与新对手玩跳棋时赢的概率
1.2 监督学习
定义: 给算法一个数据集,其中包含了正确答案,算法的目的就是给出更多的正确答案。
回归问题:
- 目的:预测连续的数值
- 例如:房价预测,用直线拟合(150),用二次函数或二阶多项式拟合(200)
分类问题:
- 目的:预测离散的数值
- 例如:肿瘤预测
- 只有一个特征时
- 有两个特征时
- 算法的最终目的是解决无穷多个特征的数据集
1.3 无监督学习
定义: 对没有类别标记的样本进行学习,学习目的通常是发现数据内在结构,典型任务是聚类和降维。
聚类问题:
- 定义:聚类(Clustering)是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。也即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离。
- 在众多领域中的应用:
- 组织大型计算机集群:在一些大型数据中心,试图找出哪些机器趋向于协同工作,如果你把这些机器放在一起,你就可以让你的数据中心更高效地工作。
- 社交网络分析:如果聚类算法知道你抖音视频里@最多的联系人,或者知道你微信里联系最多的好友,它就可以自动识别同属一个圈子的朋友,判断哪些人相互认识。
- 市场细分:许多公司都有庞大的客户信息数据库,对于一个客户数据集,你能否自动找出不同的市场分割,并自动将你的客户分到不同的细分市场,从而高效地在不同细分市场中进行销售。
- 天文数据分析:对于宇宙中的星系进行分类。
鸡尾酒会问题:
- 将鸡尾酒会中嘈杂的声音,例如音源1和音源2的混合音频,重新分离为音源1和音源2。
- 在斯坦福大学的安德鲁·伍(Andrew Ng)在Coursera的机器学习入门讲座的幻灯片中,他给出了鸡尾酒会问题的解决方案:
[W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
第二章
2.1 假设函数(Hypothesis)
Hypothesis: h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x,其中 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1 表示要学习的模型参数。
2.2 代价函数(Cost Function)
平方误差(代价)函数: J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1)=\frac{1} {2m}\sum\limits_{i=1}^m(h(x^{(i)})-y^{(i)})^2 J(θ0,θ1)=2m1i=1∑m(h(x(i))−y(i))2,其中 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i))表示第 i i i 个样本, m m m 表示样本总数, h ( x ( i ) ) h(x^{(i)}) h(x(i)) 是预测值, y ( i ) y^{(i)} y(i) 是实际值, 1 2 \frac{1}{2} 21 是为了方便求导。
目标: 最小化代价函数,即 m i n i m i z e θ 0 , θ 1 J ( θ 0 , θ 1 ) \mathop{minimize}\limits_{\theta_0,\theta_1}J(\theta_0,\theta_1) θ0,θ1minimizeJ(θ0,θ1)
只考虑一个参数 θ 1 \theta_1 θ1:
令
θ
0
=
0
\theta_0=0
θ0=0,则
J
(
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
2
=
1
2
m
∑
i
=
1
m
(
θ
1
x
(
i
)
−
y
(
i
)
)
2
J(\theta_1)=\frac{1} {2m}\sum\limits_{i=1}^m(h(x^{(i)})-y^{(i)})^2=\frac{1} {2m}\sum\limits_{i=1}^m(\theta_1x^{(i)}-y^{(i)})^2
J(θ1)=2m1i=1∑m(h(x(i))−y(i))2=2m1i=1∑m(θ1x(i)−y(i))2,目标是
m
i
n
i
m
i
z
e
θ
1
J
(
θ
1
)
\mathop{minimize}\limits_{\theta_1}J(\theta_1)
θ1minimizeJ(θ1)
考虑两个参数
θ
0
\theta_0
θ0 和
θ
1
\theta_1
θ1:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1)=\frac{1} {2m}\sum\limits_{i=1}^m(h(x^{(i)})-y^{(i)})^2 J(θ0,θ1)=2m1i=1∑m(h(x(i))−y(i))2,目标是 m i n i m i z e θ 0 , θ 1 J ( θ 0 , θ 1 ) \mathop{minimize}\limits_{\theta_0,\theta_1}J(\theta_0,\theta_1) θ0,θ1minimizeJ(θ0,θ1)
- 三维图
- 等高图
2.3 梯度下降
算法思路:
- 通常设置 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1 为0
- 不断改变 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1 的值,最后得到一个最小值或局部最小值
公式: θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) \theta_j:=\theta_j-\alpha\frac{\partial}{\partial_{\theta_j}}J(\theta_0,\theta_1) θj:=θj−α∂θj∂J(θ0,θ1),其中 : = := := 表示赋值, α \alpha α 表示学习速率
注意: 同时更新 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1
关于 α \alpha α: 过小则收敛慢,过大则可能无法收敛导致发散
实现原理: 在移动过程中,偏导值会不断变小,进而不断靠近最低点,直至偏导值为0,到达最低点
公式推导:
-
∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) 2 \frac{\partial}{\partial_{\theta_j}}J(\theta_0,\theta_1)=\frac{\partial}{\partial_{\theta_j}}\frac{1} {2m}\sum\limits_{i=1}^m(h(x^{(i)})-y^{(i)})^2=\frac{\partial}{\partial_{\theta_j}}\frac{1} {2m}\sum\limits_{i=1}^m(\theta_0+\theta_1x^{(i)}-y^{(i)})^2 ∂θj∂J(θ0,θ1)=∂θj∂2m1i=1∑m(h(x(i))−y(i))2=∂θj∂2m1i=1∑m(θ0+θ1x(i)−y(i))2
-
∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) \frac{\partial}{\partial_{\theta_0}}J(\theta_0,\theta_1)=\frac{1} {m}\sum\limits_{i=1}^m(\theta_0+\theta_1x^{(i)}-y^{(i)}) ∂θ0∂J(θ0,θ1)=m1i=1∑m(θ0+θ1x(i)−y(i))
-
∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) ⋅ x ( i ) \frac{\partial}{\partial_{\theta_1}}J(\theta_0,\theta_1)=\frac{1} {m}\sum\limits_{i=1}^m(\theta_0+\theta_1x^{(i)}-y^{(i)})\cdot x^{(i)} ∂θ1∂J(θ0,θ1)=m1i=1∑m(θ0+θ1x(i)−y(i))⋅x(i)
同步更新:
-
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) \theta_0:=\theta_0-\alpha\frac{1} {m}\sum\limits_{i=1}^m(\theta_0+\theta_1x^{(i)}-y^{(i)}) θ0:=θ0−αm1i=1∑m(θ0+θ1x(i)−y(i))
-
θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) ⋅ x ( i ) \theta_1:=\theta_1-\alpha\frac{1} {m}\sum\limits_{i=1}^m(\theta_0+\theta_1x^{(i)}-y^{(i)})\cdot x^{(i)} θ1:=θ1−αm1i=1∑m(θ0+θ1x(i)−y(i))⋅x(i)
局限性: 得到的可能是局部最优解,但由于线性回归的梯度下降函数是凸函数,故没有局部最优解,只有全局最优解
第三章
3.1 矩阵和向量
矩阵定义: 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,通常用大写字母 A A A 表示, A i j A_{ij} Aij 表示矩阵第 i i i 行第 j j j 列的元素
矩阵维数: r o w × c o l u m n row\times column row×column
向量: n × 1 n\times 1 n×1 的矩阵, n n n 维向量,通常用小写字母 y y y 表示
3.2 加法和标量乘法
加法: [ 1 2 3 4 5 6 ] + [ 7 8 9 10 11 12 ] = [ 8 10 12 14 16 18 ] \begin{bmatrix}1&2\\3&4\\5&6\end{bmatrix}+\begin{bmatrix}7&8\\9&10\\11&12\end{bmatrix}=\begin{bmatrix}8&10\\12&14\\16&18\end{bmatrix} 135246 + 791181012 = 81216101418
标量乘法: [ 1 2 3 4 5 6 ] × 3 = [ 3 6 9 12 15 18 ] \begin{bmatrix}1&2\\3&4\\5&6\end{bmatrix}\times3=\begin{bmatrix}3&6\\9&12\\15&18\end{bmatrix} 135246 ×3= 391561218
3.3 矩阵向量乘法
矩阵 × \times ×向量: [ 1 2 3 4 5 6 ] × [ 7 8 ] = [ 1 × 7 + 2 × 8 3 × 7 + 4 × 8 5 × 7 + 6 × 8 ] = [ 23 53 83 ] \begin{bmatrix}1&2\\3&4\\5&6\end{bmatrix}\times\begin{bmatrix}7\\8\end{bmatrix}=\begin{bmatrix}1\times7+2\times8\\3\times7+4\times8\\5\times7+6\times8\end{bmatrix}=\begin{bmatrix}23\\53\\83\end{bmatrix} 135246 ×[78]= 1×7+2×83×7+4×85×7+6×8 = 235383
3.4 矩阵乘法
A m × n × B n × o = C m × o : [ 1 2 3 4 5 6 ] × [ 1 2 3 4 5 6 ] = [ 1 × 1 + 2 × 3 + 3 × 5 1 × 2 + 2 × 4 + 3 × 6 4 × 1 + 5 × 3 + 6 × 5 4 × 2 + 5 × 4 + 6 × 6 ] = [ 22 28 49 64 ] A_{m\times n}\times B_{n\times o}=C_{m\times o}:\begin{bmatrix}1&2&3\\4&5&6\end{bmatrix}\times\begin{bmatrix}1&2\\3&4\\5&6\end{bmatrix}=\begin{bmatrix}1\times1+2\times3+3\times5&1\times2+2\times4+3\times6\\4\times1+5\times3+6\times5&4\times2+5\times4+6\times6\end{bmatrix}=\begin{bmatrix}22&28\\49&64\end{bmatrix} Am×n×Bn×o=Cm×o:[142536]× 135246 =[1×1+2×3+3×54×1+5×3+6×51×2+2×4+3×64×2+5×4+6×6]=[22492864]
特征:
- A × B ≠ B × A A\times B\ne B\times A A×B=B×A(对于一般矩阵而言不满足交换律)
- A × B × C = ( A × B ) × C = A × ( B × C ) A\times B\times C=(A\times B)\times C=A\times (B\times C) A×B×C=(A×B)×C=A×(B×C)(满足结合律)
- 单位矩阵 I I I 满足 I i i = 1 , I i j = 0 ( i ≠ j ) I_{ii}=1,I_{ij}=0(i\ne j) Iii=1,Iij=0(i=j),可根据需求取不同维数,如 A m × n × I n × n = I m × m × A m × n = A m × n A_{m\times n}\times I_{n\times n}=I_{m\times m}\times A_{m\times n}=A_{m\times n} Am×n×In×n=Im×m×Am×n=Am×n
3.5 逆和转置
矩阵的逆:
- A A − 1 = A − 1 A = I AA^{-1}=A^{-1}A=I AA−1=A−1A=I,只有方阵才有逆矩阵
- 没有逆的矩阵称为奇异矩阵或退化矩阵
矩阵的转置:
A = [ 1 2 3 4 5 6 ] A=\begin{bmatrix}1&2&3\\4&5&6\end{bmatrix} A=[142536],则 A T = [ 1 4 2 5 3 6 ] A^T=\begin{bmatrix}1&4\\2&5\\3&6\end{bmatrix} AT= 123456 ,满足 A i j = A j i T A_{ij}=A^T_{ji} Aij=AjiT
第四章
4.1 多元线性回归
n : n: n: 特征数量
x ( i ) : x^{(i)}: x(i): 表示第 i i i 组特征向量
x j ( i ) : x^{(i)}_j: xj(i): 表示第 i i i 组特征向量的第 j j j 个特征值
假设函数: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta}(x)=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n hθ(x)=θ0+θ1x1+θ2x2+...+θnxn
令 x 0 = 1 x_0=1 x0=1, θ = [ θ 0 θ 1 θ 2 . . . θ n ] \theta=\begin{bmatrix}\theta_0\\\theta_1\\\theta_2\\...\\\theta_n\end{bmatrix} θ= θ0θ1θ2...θn , x = [ x 0 x 1 x 2 . . . x n ] x=\begin{bmatrix}x_0\\x_1\\x_2\\...\\x_n\end{bmatrix} x= x0x1x2...xn ,
则 h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n = θ T x h_{\theta}(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n=\theta^Tx hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn=θTx
4.2 多元梯度下降法
代价函数: J ( θ ) = J ( θ 0 , θ 1 , θ 2 , . . . , θ n ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J(\theta)=J(\theta_0,\theta_1,\theta_2,...,\theta_n)=\frac{1} {2m}\sum\limits_{i=1}^m(h(x^{(i)})-y^{(i)})^2 J(θ)=J(θ0,θ1,θ2,...,θn)=2m1i=1∑m(h(x(i))−y(i))2
参数更新: θ j : = θ j − α ∂ ∂ θ j J ( θ ) = θ j − α 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) \theta_j:=\theta_j-\alpha\frac{\partial}{\partial_{\theta_j}}J(\theta)=\theta_j-\alpha\frac{1} {m}\sum\limits_{i=1}^m(h(x^{(i)})-y^{(i)})\cdot x^{(i)}_j θj:=θj−α∂θj∂J(θ)=θj−αm1i=1∑m(h(x(i))−y(i))⋅xj(i)(其中 j = 0 , 1 , 2 , . . . , n j=0,1,2,...,n j=0,1,2,...,n)
4.3 特征缩放
思想: 确保所有特征值在相似的范围,默认是 − 1 ≤ x i ≤ 1 -1\le x_i \le 1 −1≤xi≤1,这样可以走一条相对简单的路径到达最优解
做法: 均值归一化,用 x i − μ x_i-\mu xi−μ 代替 x i x_i xi,确保均值为0
x i ← x i − μ i S i x_i \leftarrow \frac{x_i-\mu_i}{S_i} xi←Sixi−μi,其中 μ i \mu_i μi 表示特征均值, S i S_i Si 表示取值范围( m a x − m i n max-min max−min)
4.4 学习率
正常工作: 对于每次迭代,
J
θ
J_\theta
Jθ 都应该减少,可以绘制出
J
θ
J_\theta
Jθ 与迭代次数之间的关系图
未正常工作: 选择更小的 α \alpha α,对于足够小的 α \alpha α,每次迭代 J θ J_\theta Jθ 都会下降,但如果 α \alpha α 太小,则会导致收敛速度太慢
如何选择合适的 α \alpha α: . . . , 0.001 , 0.003 , 0.01 , 0.03 , 0.1 , 0.3 , 1 , . . . ...,0.001,0.003,0.01,0.03,0.1,0.3,1,... ...,0.001,0.003,0.01,0.03,0.1,0.3,1,...,采用三倍策略(经验)
4.5 特征和多项式回归
例如: θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 \theta_0+\theta_1x+\theta_2x^2+\theta_3x^3 θ0+θ1x+θ2x2+θ3x3 映射到多元线性回归 h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3 hθ(x)=θ0+θ1x1+θ2x2+θ3x3
则 x 1 = x , x 2 = x 2 , x 3 = x 3 x_1=x,x_2=x^2,x_3=x^3 x1=x,x2=x2,x3=x3,可以用更少的特征学习更为复杂的模型,同时,特征放缩显得尤为重要
4.6 正规方程
推导过程:
J ( θ ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 , θ ∈ R n + 1 J(\theta)=\frac{1} {2m}\sum\limits_{i=1}^m(h(x^{(i)})-y^{(i)})^2,\theta \in R^{n+1} J(θ)=2m1i=1∑m(h(x(i))−y(i))2,θ∈Rn+1
令 ∂ ∂ θ j J ( θ ) = 0 \frac{\partial}{\partial_{\theta_j}}J(\theta)=0 ∂θj∂J(θ)=0,得 θ = ( X T X ) − 1 X T y , X ∈ R m × ( n + 1 ) \theta=(X^TX)^{-1}X^Ty,X \in R^{m\times (n+1)} θ=(XTX)−1XTy,X∈Rm×(n+1)
注意: 不需要特征缩放
梯度下降与正规方程的比较:
- 前者需要学习速率 α \alpha α,而后者不需要学习速率 α \alpha α
- 前者需要多次迭代,而后者不需要迭代
- 前者适用 n n n 比较大的情况 ( n > 1 0 4 ) (n>10^4) (n>104),而后者适用 n n n 比较小的情况
矩阵不可逆的情况很少,导致不可逆的原因:
- 存在特征量呈线性关系
- 特征量过多
解决方案: 删除一些特征,或者进行正则化
注意: 在大多数计算机求逆矩阵的库中,若矩阵不可逆,则自动返回伪逆
第五章
5.1 Octave基础
主要讲解 Octave 语言,但我更喜欢 Python,跳过!!!
第六章
6.1 分类
标签 y ∈ { 0 , 1 } y\in \{0,1\} y∈{0,1},其中 0 0 0 表示负类, 1 1 1 表示正类, 0 , 1 0,1 0,1 的定义无明确规定,但 1 1 1 更倾向于我们想找的东西
问题: 由于离群点的存在,线性回归不再适用于分类问题,因此需用逻辑回归(Logistic Regression)
关于 h θ ( x ) : h_\theta(x): hθ(x): 线性回归的 h θ ( x ) h_\theta(x) hθ(x) 取值可以大于 1 1 1 或小于 0 0 0,而逻辑回归要求 0 ≤ h θ ( x ) ≤ 1 0\le h_\theta(x) \le 1 0≤hθ(x)≤1
6.2 假设陈述
Sigmod函数: g ( z ) = 1 1 + e − z ∈ ( 0 , 1 ) g(z)=\frac{1}{1+e^{-z}}\in(0,1) g(z)=1+e−z1∈(0,1)
令 h θ ( x ) = g ( θ T x ) h_\theta(x)=g(\theta^Tx) hθ(x)=g(θTx),则 h θ ( x ) = 1 1 + e − θ T x h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}} hθ(x)=1+e−θTx1
6.3 决策边界
定义: 决策边界是假设本身及其参数的属性。
g ( z ) ≥ 0.5 ⇒ z ≥ 0 g(z) \ge 0.5 \Rightarrow z\ge 0 g(z)≥0.5⇒z≥0;反之, g ( z ) < 0.5 ⇒ z < 0 g(z) < 0.5 \Rightarrow z < 0 g(z)<0.5⇒z<0
- 预测 y = 1 y=1 y=1,如果 h θ ( x ) ≥ 0.5 h_\theta(x) \ge 0.5 hθ(x)≥0.5,即 θ T x ≥ 0 \theta^Tx \ge 0 θTx≥0
- 预测 y = 0 y=0 y=0,如果 h θ ( x ) < 0.5 h_\theta(x) < 0.5 hθ(x)<0.5,即 θ T x < 0 \theta^Tx < 0 θTx<0
解释: θ T x = 0 \theta^Tx=0 θTx=0 两侧分为两种情况,这个超平面就是决策边界
6.4 代价函数
线性回归的代价函数: J ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1} {m}\sum\limits_{i=1}^m\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2 J(θ)=m1i=1∑m21(hθ(x(i))−y(i))2
令 C o s t ( h θ ( x ( i ) ) , y ( i ) ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 Cost(h_\theta(x^{(i)}),y^{(i)})=\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2 Cost(hθ(x(i)),y(i))=21(hθ(x(i))−y(i))2
若在逻辑回归中运用线性回归的代价函数,由于 h θ ( x ) = 1 1 + e − θ T x h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}} hθ(x)=1+e−θTx1,故会导致图像为非凸函数
逻辑回归的代价函数: C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) i f y = 1 − l o g ( 1 − h θ ( x ) ) i f y = 0 Cost(h_\theta(x),y)=\begin{cases}-log(h_\theta(x))&if\ y=1\\-log(1-h_\theta(x))&if \ y =0\end{cases} Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))if y=1if y=0
直觉: 若预测与实际完全不一致时,我们将要花费很大的代价惩罚算法,故 C o s t Cost Cost 函数值越小,代价函数越好
6.5 简化代价函数与梯度下降
逻辑回归的代价函数: C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) i f y = 1 − l o g ( 1 − h θ ( x ) ) i f y = 0 Cost(h_\theta(x),y)=\begin{cases}-log(h_\theta(x))&if\ y=1\\-log(1-h_\theta(x))&if \ y =0\end{cases} Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))if y=1if y=0
将上述式子合并为一个式子: C o s t ( h θ ( x ) , y ) = − y l o g ( h θ ( x ) ) − ( 1 − y ) l o g ( 1 − h θ ( x ) ) Cost(h_\theta(x),y)=-ylog(h_\theta(x))-(1-y)log(1-h_\theta(x)) Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
进而得到: J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) l o g h θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=-\frac{1} {m}[\sum\limits_{i=1}^my^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)})log(1-h_\theta(x^{(i)}))] J(θ)=−m1[i=1∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
求解最小代价函数: θ j : = θ j − α ∂ ∂ θ j J ( θ ) : = θ j − α ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) \theta_j:=\theta_j-\alpha\frac{\partial}{\partial{\theta_j}}J(\theta):=\theta_j-\alpha\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\cdot x^{(i)}_j θj:=θj−α∂θj∂J(θ):=θj−αi=1∑m(hθ(x(i))−y(i))⋅xj(i)
总结: 与线性回归形式相同但 h θ ( x ) h_\theta(x) hθ(x) 不同,在逻辑回归中也可以使用特征缩放来加速收敛,另外,选择参数 α \alpha α 的方法同线性回归是一样的
6.6 高级优化
优化算法:
- 梯度下降法(常用,简单)
- 共轭梯度法(conjugate gradient)
- 拟牛顿法(BFGS)
- L-BFGS
高级优化算法的优点:
- 能够自主选择 α \alpha α
- 通常比梯度下降法更快
高级优化算法的缺点:
- 更复杂
6.7 多元分类:一对多
例如: 一个三分类问题转换为三个二分类问题
三种可能:
两两一组:
即:
h
θ
(
i
)
(
x
)
=
P
(
y
=
i
∣
x
;
θ
)
(
i
=
1
,
2
,
3
)
h_\theta^{(i)}(x)=P(y=i|x;\theta)\ (i=1,2,3)
hθ(i)(x)=P(y=i∣x;θ) (i=1,2,3)
故: 对于一个新的输入 x x x,选择 m a x i h θ ( i ) ( x ) \mathop{max}\limits_{i}h_\theta^{(i)}(x) imaxhθ(i)(x) 作为该输入的类别
第七章
7.1 过拟合问题
欠拟合: 指模型拟合程度不高,数据距离拟合曲线较远,或指模型没有很好地捕捉到数据特征,不能够很好地拟合数据,高偏差(High Bias)
过拟合: 模型过于紧密或精确地匹配特定数据集,以致于无法良好地拟合其他数据或预测未来的观察结果的现象,高方差(High Variance)
合适的拟合: 模型能够恰当地拟合和捕捉到数据中规律的现象
泛化能力: 机器学习算法对新鲜样本的适应能力
解决过拟合问题的方法:
- 减少特征数量
- 人工选择
- 模型选择算法
- 正则化
- 保留所有特征,减少参数 θ j \theta_j θj 的值
- 当有大量特征表现好时,每个特征对预测 y y y 的值贡献一点
7.2 代价函数
过拟合: θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 \theta_0+\theta_1x+\theta_2x^2+\theta_3x^3+\theta_4x^4 θ0+θ1x+θ2x2+θ3x3+θ4x4
其代价函数: min θ 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \mathop{\min}\limits_{\theta}\frac{1} {2m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 θmin2m1i=1∑m(hθ(x(i))−y(i))2
再加上两项: min θ 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + 1000 θ 3 2 + 1000 θ 4 2 \mathop{\min}\limits_{\theta}\frac{1} {2m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2+1000\theta^2_3+1000\theta^2_4 θmin2m1i=1∑m(hθ(x(i))−y(i))2+1000θ32+1000θ42
minisize代价函数: 自然而然地 θ 3 , θ 4 \theta_3,\theta_4 θ3,θ4 需要等于 0 0 0,相当于惩罚这两项使得式子变为二次函数,从而得到一个更简单的模型
正则化: J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac{1} {2m}[\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2+\lambda\sum\limits_{j=1}^n\theta_j^2] J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2] ( λ \lambda λ 为正则化参数)
由于不清楚哪个参数是高阶项,即不知道惩罚哪个参数能获得更好拟合的结果,因此引入正则化项统一惩罚参数以得到较为简单的函数,其中若 λ \lambda λ 设置过大,即对 θ j ( j = 1 , 2 , . . . , n ) \theta_j(j=1,2,...,n) θj(j=1,2,...,n) 的惩罚程度过大,导致 θ j ( j = 1 , 2 , . . . , n ) \theta_j(j=1,2,...,n) θj(j=1,2,...,n) 都接近于 0 0 0,最后假设模型只剩一个 θ 0 \theta_0 θ0,出现欠拟合情况
7.3 线性回归的正则化
1. 梯度下降法:
由于正则化是从第 1 1 1 项到第 n n n 项,故须先将 θ 0 \theta_0 θ0 提取出来
- θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 0 ( i ) \theta_0:=\theta_0-\alpha\frac{1}{m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\cdot x_0^{(i)} θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))⋅x0(i)
- θ j : = θ j − α [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) + λ m θ j ] ⇒ θ j : = θ j ( 1 − α λ m ) − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) ( j = 1 , 2 , . . . , n ) \theta_j:=\theta_j-\alpha[\frac{1}{m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\cdot x_j^{(i)}+\frac{\lambda}{m}\theta_j]\Rightarrow\theta_j:=\theta_j(1-\alpha\frac{\lambda}{m})-\alpha\frac{1}{m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\cdot x_j^{(i)}\ (j=1,2,...,n) θj:=θj−α[m1i=1∑m(hθ(x(i))−y(i))⋅xj(i)+mλθj]⇒θj:=θj(1−αmλ)−αm1i=1∑m(hθ(x(i))−y(i))⋅xj(i) (j=1,2,...,n)
通常 m m m 较大, λ \lambda λ 较小,故 1 − α λ m 1-\alpha\frac{\lambda}{m} 1−αmλ 的值比 1 1 1 略小,可看成是 0.99 0.99 0.99
2.正规方程法:
7.4 逻辑回归的正则化
代价函数: 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\limits_{i=1}^m[-y^{(i)}\log(h_\theta(x^{(i)}))-(1-y^{(i)})\log(1-h_\theta(x^{(i)}))] J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]
正则化后: J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta)=\frac{1}{m}\sum\limits_{i=1}^m[-y^{(i)}\log(h_\theta(x))-(1-y^{(i)})\log(1-h_\theta(x^{(i)}))]+\frac{\lambda}{2m}\sum\limits_{j=1}^n\theta_j^2 J(θ)=m1i=1∑m[−y(i)log(hθ(x))−(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
求偏导:
- θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 0 ( i ) \theta_0:=\theta_0-\alpha\frac{1}{m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\cdot x_0^{(i)} θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))⋅x0(i)
- θ j : = θ j − α [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) + λ m θ j ] ( j = 1 , 2 , . . . , n ) \theta_j:=\theta_j-\alpha[\frac{1}{m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\cdot x_j^{(i)}+\frac{\lambda}{m}\theta_j]\ (j=1,2,...,n) θj:=θj−α[m1i=1∑m(hθ(x(i))−y(i))⋅xj(i)+mλθj] (j=1,2,...,n)
第八章
8.1 非线性假设
当特征值较少时,我们依旧可以用之前的算法去解决,可当特征值数量很多时,高阶多项式也会包含其中,特征空间急剧膨胀,故通过增加特征来建立非线性分类器并不是一个好做法。
可以看到仅针对50*50像素的灰白图片,就有2500个特征值。当引入rgb时,特征值达到了7500个,如果算上多次多项式,特征值达到了三百万个,显然再继续用之前的算法难以处理这么庞大的数据。
而神经网络在处理学习复杂的非线性假设上有独特的优势,能够更好地解决问题。
8.2 神经元与大脑
起源:最初的目的是制造模拟大脑的机器
神经网络逐渐兴起于二十世纪八九十年代,但由于各种原因,在九十年代的后期应用减少了
最近,神经网络东山再起,其中一个原因是神经网络是计算量偏大的算法,由于近些年计算机运行速度变快,使得可以运行大规模的神经网络。
你能把几乎任何传感器接入到大脑中,大脑的学习算法就能找出学习数据的方法,并处理这些数据。这真是太神奇了,这也告诉我们通用人工智能是可行的,存在的!!!
8.3 模型展示
神经元模型: 逻辑回归,
f
=
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
f=h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}
f=hθ(x)=1+e−θTx1
神经网络的前向传播:
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_\theta(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))
令 x = [ x 0 x 1 x 2 x 3 ] , Z ( 2 ) = [ Z 1 ( 2 ) Z 2 ( 2 ) Z 3 ( 2 ) ] x=\begin{bmatrix}x_0\\x_1\\x_2\\x_3\end{bmatrix},Z^{(2)}=\begin{bmatrix}Z^{(2)}_1\\Z^{(2)}_2\\Z^{(2)}_3\end{bmatrix} x= x0x1x2x3 ,Z(2)= Z1(2)Z2(2)Z3(2)
则 Z ( 2 ) = θ ( 1 ) x = θ ( 1 ) a ( 1 ) , a ( 2 ) = g ( Z ( 2 ) ) Z^{(2)}=\theta^{(1)}x=\theta^{(1)}a^{(1)},a^{(2)}=g(Z^{(2)}) Z(2)=θ(1)x=θ(1)a(1),a(2)=g(Z(2))
同理, Z ( 3 ) = θ ( 2 ) a ( 2 ) , h θ ( x ) = a ( 3 ) = g ( Z ( 3 ) ) Z^{(3)}=\theta^{(2)}a^{(2)},h_\theta(x)=a^{(3)}=g(Z^{(3)}) Z(3)=θ(2)a(2),hθ(x)=a(3)=g(Z(3))
8.4 例子与直觉理解
非线性分类器可以处理异或问题,而线性分类器不可以
x 1 x_1 x1 XNOR x 2 x_2 x2:
- 在输入层定义 x 1 , x 2 x_1,x_2 x1,x2
- 在隐藏层通过 x 1 x_1 x1 AND x 2 x_2 x2 运算得到 a 1 ( 2 ) a_1^{(2)} a1(2),通过 (NOT x 1 x_1 x1) AND (NOT x 2 x_2 x2) 运算得到 a 2 ( 2 ) a_2^{(2)} a2(2)
- 在输出层通过 x 1 x_1 x1 OR x 2 x_2 x2 运算得到 a 1 ( 3 ) a_1^{(3)} a1(3)
8.5 多元分类
最后的输出层是
n
n
n 维向量
第九章
9.1 代价函数
神经网络主要应用于分类问题。
训练集: { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } \{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})\} {(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}
L L L 表示神经网络总层数, s l s_l sl 表示第 l l l 层的神经元数量(不包含偏置)。
二分类: 标签 y ∈ { 0 , 1 } y\in \{0,1\} y∈{0,1},输出层一个神经元, h θ ( x ) ∈ R h_\theta(x)\in R hθ(x)∈R
多分类: K K K 类, y ∈ R K y\in R^K y∈RK,输出层 K K K 个神经元, h θ ( x ) ∈ R K h_\theta(x)\in R^K hθ(x)∈RK
神经网络代价函数: 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}[\sum\limits_{i=1}^m\sum\limits_{k=1}^K y_k^{(i)} \log(h_\theta(x^{(i)}))_k+(1-y_k^{(i)})\log(1-h_\theta(x^{(i)}))_k)]+\frac{\lambda}{2m}\sum\limits_{l=1}^{L-1}\sum\limits_{i=1}^{s_l}\sum\limits_{j=1}^{s_l+1}(\theta_{ji}^{(l)})^2 J(θ)=−m1[i=1∑mk=1∑Kyk(i)log(hθ(x(i)))k+(1−yk(i))log(1−hθ(x(i)))k)]+2mλl=1∑L−1i=1∑slj=1∑sl+1(θji(l))2
9.2 反向传播算法
目标: min θ J ( θ ) \mathop{\min}\limits_{\theta}J(\theta) θminJ(θ)
需要计算: J ( θ ) J(\theta) J(θ) 和 ∂ ∂ θ i j ( l ) J ( θ ) \frac{\partial}{\partial\theta_{ij}^{(l)}}J(\theta) ∂θij(l)∂J(θ)
对于每个输出单元( L = 4 L=4 L=4):
- δ ( 4 ) = a ( 4 ) − y ∈ R K \delta^{(4)}=a^{(4)}-y \in R^K δ(4)=a(4)−y∈RK
- δ ( 3 ) = ( θ ( 3 ) ) T δ ( 4 ) ⋅ ∗ g ′ ( Z ( 3 ) ) , g ′ ( Z ( 3 ) ) = a ( 3 ) ⋅ ∗ ( 1 − a ( 3 ) ) \delta^{(3)}=(\theta^{(3)})^T\delta^{(4)}\cdot *g'(Z^{(3)}),g'(Z^{(3)})=a^{(3)}\cdot*(1-a^{(3)}) δ(3)=(θ(3))Tδ(4)⋅∗g′(Z(3)),g′(Z(3))=a(3)⋅∗(1−a(3))
- δ ( 2 ) = ( θ ( 2 ) ) T δ ( 3 ) ⋅ ∗ g ′ ( Z ( 2 ) ) , g ′ ( Z ( 2 ) ) = a ( 2 ) ⋅ ∗ ( 1 − a ( 2 ) ) \delta^{(2)}=(\theta^{(2)})^T\delta^{(3)}\cdot *g'(Z^{(2)}),g'(Z^{(2)})=a^{(2)}\cdot*(1-a^{(2)}) δ(2)=(θ(2))Tδ(3)⋅∗g′(Z(2)),g′(Z(2))=a(2)⋅∗(1−a(2))
- No δ ( 1 ) \delta^{(1)} δ(1)(对应输入层不会存在误差)
综上: ∂ ∂ θ i j ( l ) J ( θ ) = a j ( l ) δ i ( l + 1 ) \frac{\partial}{\partial\theta_{ij}^{(l)}}J(\theta)=a_j^{(l)}\delta_i^{(l+1)} ∂θij(l)∂J(θ)=aj(l)δi(l+1)
具体实现:
- 训练集: { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } \{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})\} {(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}
- 设置 Δ i j ( l ) = 0 \Delta_{ij}^{(l)}=0 Δij(l)=0(for all l , i , j l,i,j l,i,j)
- For
i
=
1
i=1
i=1 to
m
m
m
- 设置 a ( l ) = x ( i ) a^{(l)}=x^{(i)} a(l)=x(i)
- 前向传播计算所有的 a ( l ) , l = 2 , 3 , . . . , L a^{(l)},l=2,3,...,L a(l),l=2,3,...,L
- 利用 y ( i ) y^{(i)} y(i),计算 δ ( L ) = a ( L ) − y ( i ) \delta^{(L)}=a^{(L)}-y^{(i)} δ(L)=a(L)−y(i),然后依次计算 δ ( L − 1 ) , δ ( L − 2 ) , . . . , δ ( 2 ) \delta^{(L-1)},\delta^{(L-2)},...,\delta^{(2)} δ(L−1),δ(L−2),...,δ(2)
- Δ i j ( l ) : = Δ i j ( l ) + a j ( l ) δ i ( l + 1 ) \Delta_{ij}^{(l)}:=\Delta_{ij}^{(l)}+a_j^{(l)}\delta_i^{(l+1)} Δij(l):=Δij(l)+aj(l)δi(l+1)
- { D i j ( l ) : = 1 m Δ i j ( l ) + λ θ i j ( l ) , i f j ≠ 0 D i j ( l ) : = 1 m Δ i j ( l ) , i f j = 0 \begin{cases}D_{ij}^{(l)}:=\frac{1}{m}\Delta_{ij}^{(l)}+\lambda\theta_{ij}^{(l)},if\ j\ne0\\D_{ij}^{(l)}:=\frac{1}{m}\Delta_{ij}^{(l)},if\ j=0\end{cases} {Dij(l):=m1Δij(l)+λθij(l),if j=0Dij(l):=m1Δij(l),if j=0
- ∂ ∂ θ i j ( l ) J ( θ ) = D i j ( l ) \frac{\partial}{\partial\theta_{ij}^{(l)}}J(\theta)=D_{ij}^{(l)} ∂θij(l)∂J(θ)=Dij(l)
9.3 理解反向传播
前向传播算法:
将原
C
o
s
t
F
u
n
c
t
i
o
n
Cost\ Function
Cost Function 进行简化,得到
c
o
s
t
(
i
)
cost(i)
cost(i):
- 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}[\sum\limits_{i=1}^m\sum\limits_{k=1}^K y_k^{(i)} \log(h_\theta(x^{(i)}))_k+(1-y_k^{(i)})\log(1-h_\theta(x^{(i)}))_k)]+\frac{\lambda}{2m}\sum\limits_{l=1}^{L-1}\sum\limits_{i=1}^{s_l}\sum\limits_{j=1}^{s_l+1}(\theta_{ji}^{(l)})^2 J(θ)=−m1[i=1∑mk=1∑Kyk(i)log(hθ(x(i)))k+(1−yk(i))log(1−hθ(x(i)))k)]+2mλl=1∑L−1i=1∑slj=1∑sl+1(θji(l))2
- c o s t ( i ) = y ( i ) log h θ ( x ( i ) ) + ( 1 − y ( i ) ) log h θ ( x ( i ) ) cost(i)=y^{(i)} \log h_\theta(x^{(i)})+(1-y^{(i)})\log h_\theta(x^{(i)}) cost(i)=y(i)loghθ(x(i))+(1−y(i))loghθ(x(i))
δ j ( l ) = a j ( l ) \delta_j^{(l)}=a_j^{(l)} δj(l)=aj(l) 损失的误差: δ j ( l ) = ∂ ∂ Z j ( l ) c o s t ( i ) = ∑ k = 1 s ( l + 1 ) − 1 θ k j ( l ) ⋅ δ k ( l + 1 ) \delta_j^{(l)}=\frac{\partial}{\partial Z_j^{(l)}} cost(i)=\sum\limits_{k=1}^{s_{(l+1)}-1}\theta_{kj}^{(l)}\cdot \delta_k^{(l+1)} δj(l)=∂Zj(l)∂cost(i)=k=1∑s(l+1)−1θkj(l)⋅δk(l+1)
9.4 梯度检测
作用: 确定前向传播和反向传播没有 b u g bug bug
方法: 用数值估计梯度(Numerical Estimation Gradient)来计算梯度
公式:
- 一维: d d θ J ( θ ) ≈ J ( θ + ε ) − J ( θ − ε ) 2 ε \frac{d}{d\theta}J(\theta)\approx\frac{J(\theta+\varepsilon)-J(\theta-\varepsilon)}{2\varepsilon} dθdJ(θ)≈2εJ(θ+ε)−J(θ−ε)
- 多维: d d θ i J ( θ ) ≈ J ( θ 1 , θ 2 , . . . , θ i + ε , . . . , θ n ) − J ( θ 1 , θ 2 , . . . , θ i − ε , . . . , θ n ) 2 ε \frac{d}{d\theta_i}J(\theta)\approx\frac{J(\theta_1,\theta_2,...,\theta_i+\varepsilon,...,\theta_n)-J(\theta_1,\theta_2,...,\theta_i-\varepsilon,...,\theta_n)}{2\varepsilon} dθidJ(θ)≈2εJ(θ1,θ2,...,θi+ε,...,θn)−J(θ1,θ2,...,θi−ε,...,θn)
将这个梯度与反向传播算法中的梯度进行比较判断,最后,在真正运行反向传播算法时要将梯度检测去掉,因为它是低效的。
9.5 随机初始化
对于逻辑回归,我们可以将参数
θ
\theta
θ 全部初始化为
0
0
0。但是对于神经网络来说,如果参数
θ
\theta
θ 全部为
0
0
0,在第一遍前向计算时,所有的隐藏层神经元的激活值都相同;在反向传播时,所有权重的更新也都相同,这样会导致隐藏层神经元没有区分性。这种现象也称为对称权重现象
。
为了打破这个平衡,比较好的方式是对每个参数 θ \theta θ 都随机初始化,使得不同神经元之间的区分性更好。通常参数范围是: − ε ≤ θ i j ( l ) ≤ ε -\varepsilon\le\theta_{ij}^{(l)}\le\varepsilon −ε≤θij(l)≤ε, ε \varepsilon ε 为较小正数。
9.6 组合到一起
搭建一个网络结构: 确定输入层,隐藏层,输出层的神经元个数或层数。
训练神经网络:
- 参数的随机初始化
- 利用前向传播得到每个样本输入 x ( i ) x^{(i)} x(i) 的输出 h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i))
- 实现代价函数计算 J ( θ ) J(\theta) J(θ)
- 利用反向传播计算梯度 ∂ ∂ θ i j ( l ) J ( θ ) \frac{\partial}{\partial\theta_{ij}^{(l)}}J(\theta) ∂θij(l)∂J(θ)
- 使用梯度检测判断反向传播代码正确性
- 使用梯度下降或者更先进的优化算法,通过反向传播更新参数 θ \theta θ 最小化 J ( θ ) J(\theta) J(θ)
虽然对于非凸函数,梯度下降或者更先进的优化算法都可能收敛于局部最小值,但是实际使用中通常可以得到一个比较好的最小值。
9.7 无人驾驶
可以使用多个神经网络的集成学习组成自动驾驶系统。
第十章
10.1 决定下一步做什么
问题描述: 假设已经实现正则化线性回归算法预测房价。但是当我们用训练好了的模型来预测未知数据的时候发现有较大的误差,接下来我们该怎么办?
- 获取更多的训练样本
- 尝试减少特征的数量
- 尝试获得更多的特征
- 尝试增加多项式特征
- 尝试减少正则化程度 λ \lambda λ
- 尝试增加正则化程度 λ \lambda λ
我们并不是随机上面某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。
诊断法: 这是一种测试法,你通过执行这种测试,能够深入了解某种算法到底是否有用。这通常也能够告诉你,要想改进一种算法的效果,什么样的尝试,才是有意义的。
10.2 评估假设
首先: 随机选取 70 % 70\% 70% 的数据作为训练集,剩下 30 % 30\% 30% 的数据作为测试集。
如何计算在测试集上的误差:
- 线性回归
- 从训练集学习参数 θ \theta θ,通过最小化 J ( θ ) J(\theta) J(θ)
- 计算测试集误差: J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 J_{test}(\theta)=\frac{1}{2m_{test}}\sum\limits_{i=1}^{m_{test}}(h_\theta(x_{test}^{(i)})-y_{test}^{(i)})^2 Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2
- 逻辑回归
- 从训练集学习参数 θ \theta θ,通过最小化 J ( θ ) J(\theta) J(θ)
- 计算测试集误差: J t e s t ( θ ) = − 1 m t e s t ∑ i = 1 m t e s t y t e s t ( i ) log h θ ( x t e s t ( i ) ) + ( 1 − y t e s t ( i ) ) log h θ ( x t e s t ( i ) ) J_{test}(\theta)=-\frac{1}{m_{test}}\sum\limits_{i=1}^{m_{test}}y_{test}^{(i)}\log h_\theta(x_{test}^{(i)})+(1-y_{test}^{(i)})\log h_\theta(x_{test}^{(i)}) Jtest(θ)=−mtest1i=1∑mtestytest(i)loghθ(xtest(i))+(1−ytest(i))loghθ(xtest(i))
- 错误分类度量: e r r ( h θ ( x ) , y ) = { 1 i f h θ ( x ) ≥ 0.5 a n d y = 0 o r h θ ( x ) < 0.5 a n d y = 1 0 o t h e r w i s e err(h_\theta(x),y)=\begin{cases}1&if\ h_\theta(x)\ge0.5\ and\ y=0\ or\ h_\theta(x)<0.5\ and\ y=1\\0&otherwise\end{cases} err(hθ(x),y)={10if hθ(x)≥0.5 and y=0 or hθ(x)<0.5 and y=1otherwise
- T e s t e r r o r = 1 m t e s t ∑ i = 1 m t e s t e r r ( h θ ( x t e s t ( i ) ) , y t e s t ( i ) ) Test\ \ error=\frac{1}{m_{test}}\sum\limits_{i=1}^{m_{test}}err(h_\theta(x_{test}^{(i)}),y_{test}^{(i)}) Test error=mtest1i=1∑mtesterr(hθ(xtest(i)),ytest(i))
10.3 模型选择和训练、验证、测试集
假设我们要在10个不同次数的二项式模型之间进行选择:
- h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x
- h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 h_\theta(x)=\theta_0+\theta_1x+\theta_2x^2 hθ(x)=θ0+θ1x+θ2x2
- h θ ( x ) = θ 0 + θ 1 x + . . . + θ 3 x 3 h_\theta(x)=\theta_0+\theta_1x+...+\theta_3x^3 hθ(x)=θ0+θ1x+...+θ3x3
- . . . ... ...
- h θ ( x ) = θ 0 + θ 1 x + . . . + θ 10 x 10 h_\theta(x)=\theta_0+\theta_1x+...+\theta_{10}x^{10} hθ(x)=θ0+θ1x+...+θ10x10
适应训练集并不能推广至一般情况,故引入验证集,随机选取 60 % 60\% 60% 的数据作为训练集, 20 % 20\% 20% 的数据作为验证集, 20 % 20\% 20% 的数据作为测试集。
Training error:
J
t
r
a
i
n
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J_{train}(\theta)=\frac{1}{2m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2
Jtrain(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
Cross Validation error:
J
c
v
(
θ
)
=
1
2
m
c
v
∑
i
=
1
m
c
v
(
h
θ
(
x
c
v
(
i
)
)
−
y
c
v
(
i
)
)
2
J_{cv}(\theta)=\frac{1}{2m_{cv}}\sum\limits_{i=1}^{m_{cv}}(h_\theta(x_{cv}^{(i)})-y_{cv}^{(i)})^2
Jcv(θ)=2mcv1i=1∑mcv(hθ(xcv(i))−ycv(i))2
Test error:
J
t
e
s
t
(
θ
)
=
1
2
m
t
e
s
t
∑
i
=
1
m
t
e
s
t
(
h
θ
(
x
t
e
s
t
(
i
)
)
−
y
t
e
s
t
(
i
)
)
2
J_{test}(\theta)=\frac{1}{2m_{test}}\sum\limits_{i=1}^{m_{test}}(h_\theta(x_{test}^{(i)})-y_{test}^{(i)})^2
Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2
模型选择的方法:
- 使用训练集计算各个模型的最小代价函数 J θ J_\theta Jθ 得到模型参数 θ \theta θ
- 使用验证集计算出各个模型的 J c v J_{cv} Jcv
- 选择 J c v J_{cv} Jcv 最小的模型
- 使用测试集计算出 J t e s t J_{test} Jtest,用它来衡量当前模型的泛化能力
10.4 诊断偏差与方差
当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,高偏差和高方差的问题基本上来说是欠拟合和过拟合的问题。
我们通常会通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:
Bias/variance
Training error:
J
t
r
a
i
n
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J_{train}(\theta)=\frac{1}{2m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2
Jtrain(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
Cross Validation error:
J
c
v
(
θ
)
=
1
2
m
c
v
∑
i
=
1
m
c
v
(
h
θ
(
x
c
v
(
i
)
)
−
y
c
v
(
i
)
)
2
J_{cv}(\theta)=\frac{1}{2m_{cv}}\sum\limits_{i=1}^{m_{cv}}(h_\theta(x_{cv}^{(i)})-y_{cv}^{(i)})^2
Jcv(θ)=2mcv1i=1∑mcv(hθ(xcv(i))−ycv(i))2
对于训练集,当 d d d 较小时,模型拟合程度更低,误差较大;随着 d d d 的增长,拟合程度提高,误差减小。
对于交叉验证集,当 d d d 较小时,模型拟合程度低,误差较大;但是随着 d d d 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。
如果我们的交叉验证集误差较大,我们如何判断是方差还是偏差呢?
- 当 J c v ( θ ) ≈ J t r a i n ( θ ) J_{cv}(\theta) \approx J_{train}(\theta) Jcv(θ)≈Jtrain(θ) 时:高偏差/欠拟合
- 当 J c v ( θ ) ≫ J t r a i n ( θ ) J_{cv}(\theta) \gg J_{train}(\theta) Jcv(θ)≫Jtrain(θ) 时:高方差/过拟合
10.5 正则化和偏差、方差
在我们在训练模型的过程中,一般会使用一些正则化方法来防止过拟合。但是正则化的程度可能会太高或太低,即我们在选择 λ \lambda λ 的值时也需要思考与刚才选择多项式模型类似的问题。
我们选择一系列的想要测试的 λ \lambda λ 值,通常是 0 ∼ 10 0\sim 10 0∼10 之间的呈现 2 2 2 倍关系的值 ( 0 , 0.01 , 0.02 , 0.04 , . . . , 10 ) (0,0.01,0.02,0.04,...,10) (0,0.01,0.02,0.04,...,10) 共 12 12 12 个,我们同样把数据分为训练集、验证集和测试集。
如何选择 λ \lambda λ:
- 使用训练集计算不同程度正则化模型的最小代价函数 J θ J_\theta Jθ 得到模型参数 θ \theta θ
- 使用验证集计算出各个模型的 J c v J_{cv} Jcv
- 选择 J c v J_{cv} Jcv 最小的模型
- 使用测试集计算出 J t e s t J_{test} Jtest,用它来衡量当前模型的泛化能力
- 当 λ \lambda λ 较小时, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) 较小,而 J c v ( θ ) J_{cv}(\theta) Jcv(θ) 较大
- 随着 λ \lambda λ 的增加, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) 不断增加,而 J c v ( θ ) J_{cv}(\theta) Jcv(θ) 则是先减小后增加
10.6 学习曲线
定义: 学习曲线就是一种很好的工具,我经常使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。学习曲线是学习算法的一个很好的合理检验(Sanity Check)。
思想: 当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。
-
高偏差
在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。 -
高方差
在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。
10.7 决定接下来做什么
问题描述: 假设已经实现正则化线性回归算法预测房价。但是当我们用训练好了的模型来预测未知数据的时候发现有较大的误差,接下来我们该怎么办?
- 获取更多的训练样本——解决高方差
- 尝试减少特征的数量——解决高方差
- 尝试获得更多的特征——解决高偏差
- 尝试增加多项式特征——解决高偏差
- 尝试减少正则化程度 λ \lambda λ ——解决高偏差
- 尝试增加正则化程度 λ \lambda λ ——解决高方差
神经网络的偏差和方差:
- 小型神经网络
- 更少的参数
- 更可能欠拟合
- 计算简单
- 大型神经网络
- 更多的参数
- 更可能过拟合(可以使用正则化处理)
- 计算复杂