Datawhale X 李宏毅苹果书 AI夏令营 Task02:线性模型
y
=
b
+
∑
j
=
1
7
w
j
x
j
y = b + \sum^{7}_{j=1} w_jx_j
y=b+j=1∑7wjxj
其中
x
j
x_j
xj 代表第
j
j
j 天的观看测试,也就是 7 天前的数据,通通乘上不同的权重
w
j
w_j
wj,加起来,再加上偏置得到预测的结果。考虑更多天没有办法再更降低损失了。看来考虑天数这件事,也许已经到了一个极限。这些模型都是把输入的特征
x
x
x 乘上一个权重,再加上一个偏置就得到预测的结果,这样的模型称为线性模型(linear model)。接下来会看如何把线性模型做得更好
分段线性曲线
分段曲线就是只要有足够的线性函数把它加起来,就可以变成任何连续的曲线。
而这里可以用一个用 Sigmoid 函数来逼近 Hard Sigmoid,Sigmoid 函数的表达式为:
y
=
c
1
1
+
e
−
(
b
+
w
x
1
)
y = c\frac{1}{1 + e^{-(b+wx_1)}}
y=c1+e−(b+wx1)1
如果
x
1
x_1
x1 的值,趋近于无穷大的时候,
e
−
(
b
+
w
x
1
)
e^{−(b+wx_1)}
e−(b+wx1) 这一项就会消失,当
x
1
x_1
x1 非常大的时候,这一条就会收敛在高度为
c
c
c 的地方。如果
x
1
x_1
x1 负的非常大的时候,分母的地方就会非常大,
y
y
y 的值就会趋近于 0。调整这里的 b、w 和 c 可以制造各种不同形状的 Sigmoid 函数,用各种不同形状的 Sigmoid函数去逼近 Hard Sigmoid 函数
线性代数表示方式:
y
=
b
+
c
T
σ
(
b
+
W
x
)
y = b + c^T \sigma(b + Wx)
y=b+cTσ(b+Wx)
第一个
b
b
b 常数,第二个
b
b
b 是以一个向量
将未知量
w
,
b
w, b
w,b 用 $ \theta $ 代替,这里将Loss函数改写为
L
(
θ
)
L(\theta)
L(θ) , 计算方法依旧不变,给一组
b
,
c
T
,
b
,
W
,
x
b, c^T, b, W, x
b,cT,b,W,x 计算结果
y
y
y 与真实值
y
^
\hat{y}
y^ 之间的差距,并累计求平均、
L
o
s
s
:
L
=
1
N
∑
n
e
n
Loss: L = \frac{1}{N}\sum_{n}e_n
Loss:L=N1n∑en
θ = [ θ 1 θ 2 θ 3 . . . ] \theta = \begin{bmatrix} \theta_1 \\ \theta_2 \\ \theta_3 \\ ... \end{bmatrix} θ= θ1θ2θ3...
优化新模型
θ
∗
=
a
r
g
m
i
n
θ
L
\theta^* = arg min_\theta L
θ∗=argminθL
-
随机选一个 $ \theta^0 $
-
计算每一个 θ \theta θ 的 “评分” 来最终接近最优解,用向量 g g g 来表示 ,也成为 gradient (梯度)
g = [ δ L δ θ 1 ∣ θ = θ 0 δ L δ θ 2 ∣ θ = θ 0 . . . ] g = \begin{bmatrix} \frac{\delta L}{\delta \theta_1}|_{\theta=\theta^0} \\ \frac{\delta L}{\delta \theta_2}|_{\theta=\theta^0} \\ ... \end{bmatrix} g= δθ1δL∣θ=θ0δθ2δL∣θ=θ0...
g = ∇ L ( θ 0 ) g = \nabla L(\theta^0) g=∇L(θ0)
接下来对 θ \theta θ 进行更新
. . . ← [ θ 1 3 θ 2 3 . . . ] ← [ θ 1 2 θ 2 2 . . . ] ← [ θ 1 1 θ 2 1 . . . ] ← [ θ 1 0 θ 2 0 . . . ] − [ η δ L δ θ 1 ∣ θ = θ 0 η δ L δ θ 2 ∣ θ = θ 0 . . . ] ... \leftarrow \begin{bmatrix} \theta_1^3 \\ \theta_2^3 \\ ... \end{bmatrix} \leftarrow \begin{bmatrix} \theta_1^2 \\ \theta_2^2 \\ ... \end{bmatrix} \leftarrow \begin{bmatrix} \theta_1^1 \\ \theta_2^1 \\ ... \end{bmatrix} \leftarrow \begin{bmatrix} \theta_1^0 \\ \theta_2^0 \\ ... \end{bmatrix} - \begin{bmatrix} \eta\frac{\delta L}{\delta \theta_1}|_{\theta=\theta^0} \\ \eta\frac{\delta L}{\delta \theta_2}|_{\theta=\theta^0} \\ ... \end{bmatrix} ...← θ13θ23... ← θ12θ22... ← θ11θ21... ← θ10θ20... − ηδθ1δL∣θ=θ0ηδθ2δL∣θ=θ0...
.
.
.
←
θ
3
←
θ
2
←
θ
1
←
θ
0
−
η
g
... \leftarrow \theta^3 \leftarrow \theta^2 \leftarrow \theta^1 \leftarrow \theta^0 - \eta g
...←θ3←θ2←θ1←θ0−ηg
根据 gradient 将
θ
0
\theta^0
θ0 更新为
θ
1
\theta^1
θ1, 再算再更,再算再更,当然我们不是拿所有数据一次直接算一个gradient,而是将其分为多个batch,再用其算每个batch对应的gradient,再进行update,把所有的数据进行一遍更新称为epoch
当然不止Sigmoid一种函数,还可以用Rectified Linear Unit(ReLU)
所以两个ReLU才是一个Sigmoid, 这就是Activation Function激活函数
y
=
b
+
∑
i
c
i
s
i
g
m
o
i
d
(
b
i
+
∑
j
w
i
j
x
j
)
y = b + \sum_i c_i sigmoid(b_i + \sum_j w_{ij} x_j)
y=b+i∑cisigmoid(bi+j∑wijxj)
y = b + ∑ 2 i c i m a x ( 0 , b i + ∑ j w i j x j ) y = b + \sum_{2i} c_i max(0, b_i + \sum_j w_{ij} x_j) y=b+2i∑cimax(0,bi+j∑wijxj)
反复,反复多次即为深度学习:
当然训练中出现Train Data预测在变好,但在未见Data上并没变好,即为过拟合Overfitting