8.3 作业
-
将向量下标为偶数的分量累加
∑ i % 2 = 0 x i \sum_{i \% 2 = 0} x_i ∑i%2=0xidouble sum = 0; for (int i = 1; i <= n; i++){ if(i % 2 == 0){ sum += x[i]; } }
-
各出一道累加、累乘、积分表达式的习题, 并给出标准答案
例1:求 1 + 2 ! + 3 ! + ⋯ + 10 ! 1+2!+3!+\dots+10! 1+2!+3!+⋯+10!的和
∑ i = 1 10 ∏ j = 1 i x j \sum_{i=1}^{10}\prod_{j=1}^{i}x_j i=1∑10j=1∏ixjfloat n, s = 0, t = 1; for(n = 1; n <= 10; n++) { t *= n; s += t; } printf("1+2!+3!...+10!=%e\n", s); // 4.037913e+006
例2: ∫ 0 2 x d x \int_{0}^{2} x \mathrm{d}x ∫02xdx
double integration = 0; double delta = 0.01; for (double x = 0; x <= 2; x += delta){ integration += x * delta; } printf("%f",integration); //1.990000
-
你使用过三重累加吗? 描述一下其应用
需要计算三维数组元素总和时使用, 同理 n n n 维数组用到 n n n 重累加 -
给一个常用的定积分, 将手算结果与程序结果对比
∫ 0 π 2 sin ( x ) d x \int_{0}^{\frac{\pi}{2}} \sin(x) \mathrm{d}x ∫02πsin(x)dx
使用C语言程序结果:#include<math.h> #include<stdio.h> #define PI acos(-1) int main(){ double integration = 0; double delta = 0.01; for (int x = 0; x <= PI/2; x += delta) integration += sin(x) * delta; printf("%f",integration); // 1.004195 return 0; }
手算结果:
∫ 0 π 2 sin ( x ) d x = − cos ( x ) ∣ 0 π 2 = 1 \int_{0}^{\frac{\pi}{2}} \sin(x) \mathrm{d}x= -\cos(x) \vert_0^{\frac{\pi}{2}}= 1 ∫02πsin(x)dx=−cos(x)∣02π=1
9.3 作业
- 自己写一个小例子
(
n
=
3
,
m
=
1
)
(n = 3 , m = 1)
(n=3,m=1) 来验证最小二乘法
X = [ 1 2 1 1 1 1 ] , Y = [ 1 2 1 ] \mathbf{X}= \begin{bmatrix} 1 & 2 \\ 1 & 1 \\ 1 & 1 \\ \end{bmatrix}, \mathbf{Y}= \begin{bmatrix} 1\\ 2\\ 1\\ \end{bmatrix} X=⎣⎡111211⎦⎤,Y=⎣⎡121⎦⎤
w \mathbf{w} w 计算式子:
w = ( X T X ) − 1 X T Y \mathbf{w}=(\mathbf{X}^\mathbf{T}\mathbf{X})^{-1}\mathbf{X}^\mathbf{T}\mathbf{Y} w=(XTX)−1XTY
即:
w = ( [ 1 1 1 2 1 1 ] × [ 1 2 1 1 1 1 ] ) − 1 × [ 1 1 1 2 1 1 ] × [ 1 2 1 ] \mathbf{w}= \left( \begin{bmatrix} 1 & 1 & 1\\ 2 & 1 & 1\\ \end{bmatrix} \times \begin{bmatrix} 1 & 2 \\ 1 & 1 \\ 1 & 1 \\ \end{bmatrix} \right)^{-1} \times \begin{bmatrix} 1 & 1 & 1\\ 2 & 1 & 1\\ \end{bmatrix} \times \begin{bmatrix} 1\\ 2\\ 1\\ \end{bmatrix} w=⎝⎛[121111]×⎣⎡111211⎦⎤⎠⎞−1×[121111]×⎣⎡121⎦⎤
最终结果:
w = [ 2 − 0.5 ] \mathbf{w}= \begin{bmatrix} 2\\ -0.5\\ \end{bmatrix} w=[2−0.5]
其中 w 0 = b = 2 w_0=b=2 w0=b=2
写出关于 w \mathbf{w} w 的推导过程
推导过程:
∥
X
w
−
Y
∥
2
2
=
(
X
w
−
Y
)
T
(
X
w
−
Y
)
=
(
w
T
X
T
−
Y
T
)
(
X
w
−
Y
)
=
w
T
X
T
X
w
−
w
T
X
T
Y
−
Y
T
X
w
−
Y
T
Y
\begin{aligned} \lVert \mathbf{X}\mathbf{w}-\mathbf{Y} \rVert_2^2&= (\mathbf{X}\mathbf{w}-\mathbf{Y})^{\mathbf{T}}(\mathbf{X}\mathbf{w}-\mathbf{Y}) \\&= (\mathbf{w}^{\mathbf{T}}\mathbf{X}^{\mathbf{T}}-\mathbf{Y}^{\mathbf{T}})(\mathbf{X}\mathbf{w}-\mathbf{Y}) \\&= \mathbf{w}^{\mathbf{T}}\mathbf{X}^{\mathbf{T}}\mathbf{X}\mathbf{w}-\mathbf{w}^{\mathbf{T}}\mathbf{X}^{\mathbf{T}}\mathbf{Y}-\mathbf{Y}^{\mathbf{T}}\mathbf{X}\mathbf{w}-\mathbf{Y}^{\mathbf{T}}\mathbf{Y} \end{aligned}
∥Xw−Y∥22=(Xw−Y)T(Xw−Y)=(wTXT−YT)(Xw−Y)=wTXTXw−wTXTY−YTXw−YTY
令
J
(
w
)
=
w
T
X
T
X
w
−
w
T
X
T
Y
−
Y
T
X
w
−
Y
T
Y
J(\mathbf{w})=\mathbf{w}^{\mathbf{T}}\mathbf{X}^{\mathbf{T}}\mathbf{X}\mathbf{w}-\mathbf{w}^{\mathbf{T}}\mathbf{X}^{\mathbf{T}}\mathbf{Y}-\mathbf{Y}^{\mathbf{T}}\mathbf{X}\mathbf{w}-\mathbf{Y}^{\mathbf{T}}\mathbf{Y}
J(w)=wTXTXw−wTXTY−YTXw−YTY, 将该式关于
w
\mathbf{w}
w 求导 (使用向量求导法则) 并令其为 0。
矩阵求导法则:
d
A
B
d
B
=
A
T
d
A
T
B
d
A
=
B
d
X
T
A
X
d
X
=
2
A
X
\begin{aligned} \frac{d\mathbf{A}\mathbf{B}}{d\mathbf{B}}&=\mathbf{A}^{\mathbf{T}} \\ \frac{d\mathbf{A}^{\mathbf{T}}\mathbf{B}}{d\mathbf{A}}&=\mathbf{B} \\ \frac{d\mathbf{X}^{\mathbf{T}}\mathbf{A}\mathbf{X}}{d\mathbf{X}}&=2\mathbf{AX} \\ \end{aligned}
dBdABdAdATBdXdXTAX=AT=B=2AX
所以:
d
J
(
w
)
d
w
=
2
X
T
X
w
−
X
T
Y
−
X
T
Y
−
0
=
2
X
T
X
w
−
2
X
T
Y
=
X
T
X
w
−
X
T
Y
\begin{aligned} \frac{dJ(\mathbf{w})}{d\mathbf{w}}&=2\mathbf{X}^\mathbf{T}\mathbf{X}\mathbf{w}-\mathbf{X}^\mathbf{T}\mathbf{Y}-\mathbf{X}^\mathbf{T}\mathbf{Y}-0\\ &=2\mathbf{X}^\mathbf{T}\mathbf{X}\mathbf{w}-2\mathbf{X}^\mathbf{T}\mathbf{Y}\\ &=\mathbf{X}^\mathbf{T}\mathbf{X}\mathbf{w}-\mathbf{X}^\mathbf{T}\mathbf{Y} \end{aligned}
dwdJ(w)=2XTXw−XTY−XTY−0=2XTXw−2XTY=XTXw−XTY
令
d
J
(
w
)
d
w
=
0
\frac{dJ(\mathbf{w})}{d\mathbf{w}}=0
dwdJ(w)=0 得
w
=
(
X
T
X
)
−
1
X
T
Y
\mathbf{w}=(\mathbf{X}^\mathbf{T}\mathbf{X})^{-1}\mathbf{X}^\mathbf{T}\mathbf{Y}
w=(XTX)−1XTY
10.6 作业
自己推导一遍Logistic 回归, 并描述这个方法的特点 (不少于 5 条)
逻辑回归特点:
- 选择sigmoid 函数作为阶跃函数, 因为sigmoid函数满足在实数集上可导, 并且sigmoid函数能将数据转换为0到1之间数, 将数据归一化
- 利用极大似然估计求解优化问题, 使用连乘的方式考虑到每个条件概率
- 求解最大似然问题时, 通常两边取对数, 将连乘转化为连加, 降低计算难度
- 在对 w w w 求导时, 由于 w w w 作为一个向量, 求导后计算导数为0时需要求解一个方程组, 且无法获得解析式, 所以采用梯度下降的方式
- 统一 y i y_i yi 的不同取值(0,1), 广义化优化目标
- 带参数的条件概率写法: P ( y = 1 ∣ x ; w ) P(y=1 \vert \mathbf{x};\mathbf{w}) P(y=1∣x;w), 在分号后面写上参数
推导过程:
1.sigmoid函数:
P
(
y
=
1
∣
x
;
w
)
=
1
1
+
e
−
x
w
P(y = 1 \vert \mathbf{x}; \mathbf{w}) = \frac{1}{1 + e^{-\mathbf{xw}}}
P(y=1∣x;w)=1+e−xw1
2.优化目标:
P
(
y
i
∣
x
i
;
w
)
=
P
(
y
i
=
1
∣
x
i
;
w
)
y
i
(
1
−
P
(
y
i
=
1
∣
x
i
;
w
)
1
−
y
i
)
P(y_i\vert \mathbf{x_i}; \mathbf{w}) =P(y_i=1\vert \mathbf{x_i}; \mathbf{w})^{y_i}(1-P(y_i=1\vert \mathbf{x_i}; \mathbf{w})^{1-y_i})
P(yi∣xi;w)=P(yi=1∣xi;w)yi(1−P(yi=1∣xi;w)1−yi)
3.将优化目标转化为极大似然:
arg max
w
L
(
w
)
=
∏
i
=
1
n
P
(
y
i
∣
x
i
;
w
)
\underset{\mathbf{w}}{\argmax} L(\mathbf{w})=\prod_{i=1}^nP(y_i \vert \mathbf{x_i};\mathbf{w})
wargmaxL(w)=∏i=1nP(yi∣xi;w),记 损失函数为
L
(
w
)
L(\mathbf{w})
L(w)
4.求解
w
\mathbf{w}
w 偏导:
log
L
(
w
)
=
∑
i
=
1
n
log
P
(
y
i
∣
x
i
;
w
)
=
∑
i
=
1
n
y
i
log
P
(
y
i
=
1
∣
x
i
;
w
)
+
(
1
−
y
i
)
log
(
1
−
P
(
y
i
=
1
∣
x
i
;
w
)
)
=
∑
i
=
1
n
y
i
log
P
(
y
i
=
1
∣
x
i
;
w
)
1
−
P
(
y
i
=
1
∣
x
i
;
w
)
+
log
(
1
−
P
(
y
i
=
1
∣
x
i
;
w
)
)
=
∑
i
=
1
n
y
i
x
i
w
−
log
(
1
+
e
x
i
w
)
\begin{aligned} \log L(\mathbf{w}) & = \sum_{i = 1}^n \log P(y_i \vert \mathbf{x}i; \mathbf{w}) \\ &= \sum_{i = 1}^n y_i \log P(y_i = 1 \vert \mathbf{x}_i; \mathbf{w}) + (1 - y_i) \log(1 - P(y_i = 1 \vert \mathbf{x}i; \mathbf{w})) \\ &= \sum_{i = 1}^n y_i \log \frac{P(y_i = 1 \vert \mathbf{x}_i; \mathbf{w})}{1 - P(y_i = 1 \vert \mathbf{x}_i; \mathbf{w})} + \log (1 - P(y_i = 1 \vert \mathbf{x}i; \mathbf{w})) \\ &= \sum_{i = 1}^n y_i \mathbf{x}_i \mathbf{w} - \log (1 + e^{\mathbf{x}_i \mathbf{w}}) \end{aligned}
logL(w)=i=1∑nlogP(yi∣xi;w)=i=1∑nyilogP(yi=1∣xi;w)+(1−yi)log(1−P(yi=1∣xi;w))=i=1∑nyilog1−P(yi=1∣xi;w)P(yi=1∣xi;w)+log(1−P(yi=1∣xi;w))=i=1∑nyixiw−log(1+exiw)
∂
log
L
(
w
)
∂
w
=
∑
i
=
1
n
y
i
x
i
−
e
x
i
w
1
+
e
x
i
w
x
i
=
∑
i
=
1
n
(
y
i
−
e
x
i
w
1
+
e
x
i
w
)
x
i
\begin{aligned} \frac{\partial \log L(\mathbf{w})}{\partial \mathbf{w}} &= \sum_{i = 1}^n y_i \mathbf{x}_i - \frac{e^{\mathbf{x}_i \mathbf{w}}}{1 + e^{\mathbf{x}_i \mathbf{w}}} \mathbf{x}i \\ & = \sum_{i = 1}^n \left(y_i - \frac{e^{\mathbf{x}_i \mathbf{w}}}{1 + e^{\mathbf{x}_i \mathbf{w}}}\right) \mathbf{x}_i\end{aligned}
∂w∂logL(w)=i=1∑nyixi−1+exiwexiwxi=i=1∑n(yi−1+exiwexiw)xi
这里存在一个问题, 在对
w
w
w 求导时, 由于
w
w
w 作为一个向量, 求导后计算导数为0时需要求解一个方程组, 且无法获得解析式, 所以采用梯度下降的方式:
w
t
+
1
=
w
t
−
α
∂
log
L
(
w
)
∂
w
\mathbf{w}^{t+1}=\mathbf{w}^t-\alpha\frac{\partial \log L(\mathbf{w})}{\partial \mathbf{w}}
wt+1=wt−α∂w∂logL(w)
这里
α
\alpha
α 为学习率, 需要合适设置, 通常取0.001, 学习率不宜过大也不宜过小, 学习率偏大可能会导致
w
\mathbf{w}
w 值震荡越来越偏离最优值, 学习率偏小又会造成收敛幅度过小