4¶
【1】构建模型使得预测值与真实值的误差最小常用向量2-范数度量,求解模型过程中需要计算梯度,求梯度:
\(\begin{array} { r } { f ( A ) = \frac { 1 } { 2 } | | A x + b - y | | _ { 2 } ^ { 2 } } \end{array}\) ,求 \(\frac { \partial f } { \partial A }\)
\(\begin{array} { r } { f ( x ) = \frac { 1 } { 2 } \big | \big | A x + b - y \big | \big | _ { 2 } ^ { 2 } } \end{array}\) ,求 \(\frac { \partial f } { \partial x }\)
其中 \(A \in \mathbb { R } ^ { m \times n } , x \in \mathbb { R } ^ { n } , b , y \in \mathbb { R } ^ { m }\)
【2】利用迹微分法求解
\(W \in \mathbb { R } ^ { m \times m }\)
【3】二次型是数据分析中常用函数,求
\(A \in \mathbb { R } ^ { m \times m } , x \in \mathbb { R } ^ { m }\)
【4】
定义 \(( \exp ( z ) ) _ { i } = \exp ( z _ { i } ) , ( \ln ( z ) ) _ { i } = \ln ( z _ { i } )\) ,则
成为Softmax函数,如果 \(q = f ( z ) , J = - p ^ { T } \ln ( q )\) ,其中 \(p , q , z \in \mathbb { R } ^ { n }\) ,并且 \({ \bf 1 } ^ { T } p = 1\) ,则:
1.证明: \(\begin{array} { r } { \frac { \partial J } { \partial z } = q - p } \end{array}\)
2.若 \(z = W x\) ,其中 \(\begin{array} { r } { W \in \mathbb { R } ^ { n \times m } , x \in \mathbb { R } ^ { m } , \frac { \partial J } { \partial W } = ( q - p ) x ^ { T } } \end{array}\) 是否成立。
【5】
以下内容是利用极大似然估计求解多元正态分布模型的关键步骤:
\(L\) 是对数似然, \(N\) 为样本数, \(d\) 为样本维数, \(\Sigma \in \mathbb { R } ^ { d \times d }\) 为协方差矩阵(对称矩阵), \(\boldsymbol { \mu } \in \mathbb { R } ^ { d }\) 为期望向量。
1.求 \(\frac { \partial L } { \partial \mu }\)
2.当 \(\begin{array} { r } { \mu = \frac { 1 } { N } \sum _ { t } x _ { t } } \end{array}\) 使,求 \(\frac { \partial L } { \partial \Sigma }\) ,并求使 \(\begin{array} { r } { \frac { \partial L } { \partial \Sigma } = 0 } \end{array}\) 成立的 \(\Sigma\) 。
【6】
求
其中 $ { X } \in \mathbb { R } ^ { m \times m }$ 为可逆矩阵。
【7】
求
其中 \(A \in \mathbb { R } ^ { m \times n } , X \in \mathbb { R } ^ { n \times k } , B \in \mathbb { R } ^ { k \times k } , C \in \mathbb { R } ^ { n \times m }\)
【8】
求激活函数
的导数
【9】
求
其中 \(x , \mu , \sigma \in \mathbb { R } ^ { n }\)
【10】
阅读以下代码,填写更新梯度部分的代码。(提交时,需要提交补全的代码,以及最后10次输出的截图)
实现代码:
import numpy as np
N, D_in, H, D_out = 64, 1000, 100, 10
# 随机创建一些训练数据
x = np.random.randn(N, D_in)
y = np.random.randn(N, D_out)
w1 = np.random.randn(D_in, H)
w2 = np.random.randn(H, D_out)
learning_rate = 1e-6
for it in range(500):
# Forward pass
h = x.dot(w1) # N * H
h_relu = np.maximum(h, 0) # N * H
y_pred = h_relu.dot(w2) # N * D_out
# compute loss
loss = np.square(y_pred - y).sum()
print(it, loss)
# Backward pass
# compute the gradient
grad_y_pred = (y_pred - y)
grad_w2 = h_relu.T.dot(grad_y_pred)
grad_h_relu = grad_y_pred.dot(w2.T)
grad_h = grad_h_relu.copy()
grad_h[h < 0] = 0
grad_w1 = x.T.dot(grad_h)
w1 -= learning_rate * grad_w1
w2 -= learning_rate * grad_w2
输出结果(最后10次循环):