第三课
无监督学习、推荐系统和强化学习
一、无监督学习
-聚类(Clustering):
数据集只有x没有y,分析数据集把数据分类为彼此相似的集群中。
-K-means聚类算法(K-means algorithm):
思路:
1.将每个点分配给簇质心,距离哪个质心近就算哪个。
2.将每个簇质心移动到分配给它的所有点的平均值。
-优化目标(Optimization objective):
成本函数(失真函数):
J
(
c
(
1
)
,
.
.
,
c
(
m
)
,
μ
1
,
.
.
.
,
μ
k
)
=
1
m
∑
i
=
1
m
∥
x
(
i
)
−
μ
c
(
i
)
∥
2
J(c^{(1)},..,c^{(m)},\mu _{1},..., \mu _{k} ) = \frac{1}{m} \sum_{i=1}^{m} \left \|x^{(i)} - \mu _{c^{(i)}}\right \|^{2}
J(c(1),..,c(m),μ1,...,μk)=m1i=1∑m
x(i)−μc(i)
2
每次更新簇质心时,也下降了成本函数;如果成本函数保持不变,说明值已经收敛了。
-初始化K-means(Initializing K-means):
随机选择数据点作为簇质心,并计算此时的成本函数;
一般重复50-100次,从而选择出最合适的集群。
-选择聚类数量(Choosing the Number of Clusters):
肘部方法(Elbow method):
增大簇的数量,成本函数逐渐减小,图片趋于平缓时的簇值,称为肘部。
-发现异常事件(Finding unusual events):
如果一个数据明显偏离于其他数据,那么这个数据就有可能有问题。
-高斯正态分布(Gaussian (Normal)Distribution):
p
(
x
)
=
1
2
π
σ
e
−
(
x
−
μ
)
2
2
σ
2
p(x)=\frac{1}{\sqrt{2\pi } \sigma } e^{\frac{-(x-\mu )^{2} }{2\sigma ^{2} } }
p(x)=2πσ1e2σ2−(x−μ)2
-异常检测算法:
μ
j
=
1
m
∑
i
=
1
m
x
j
(
i
)
\mu _{j} =\frac{1}{m} \sum_{i=1}^{m} x_{j}^{(i)}
μj=m1i=1∑mxj(i)
σ
j
2
=
1
m
∑
i
=
1
m
(
x
j
(
i
)
−
μ
j
)
2
\sigma _{j}^{2} = \frac{1}{m} \sum_{i=1}^{m} (x _{j}^{(i)}-\mu _{j} )^{2}
σj2=m1i=1∑m(xj(i)−μj)2
p
(
x
)
=
∏
j
=
1
n
p
(
x
j
;
μ
j
,
σ
j
2
)
p(x) = \prod_{j=1}^{n} p(x_{j};\mu _{j},\sigma _{j}^{2} )
p(x)=j=1∏np(xj;μj,σj2)
如果p(x) <ε,则将数据标记为异常。
-开发与评估异常检测系统(Developing and evaluating an anomaly detection system):
y
=
{
1
if
p
(
x
)
<
ε
(
a
n
o
m
a
l
y
)
0
if
p
(
x
)
≥
ε
(
n
o
r
m
a
l
)
y=\begin{cases} 1 & \text{ if } p(x)<\varepsilon (anomaly) \\ 0 & \text{ if } p(x)\ge \varepsilon (normal) \end{cases}
y={10 if p(x)<ε(anomaly) if p(x)≥ε(normal)
由于异常数据例和正常例比例差距过大,所有可以采用倾斜数据集等分析方式来处理数据。
-异常检测vs监督学习(Anomaly detection vs. supervised learning):
正例特别少时,异常检测更好;正例与反例数量相当,监督学习更合适。
异常检测用于:判断金融欺诈、检测设备未知故障、防黑客骇入…
监督学习用于:判断垃圾邮件、检测设备已知故障、天气预报、病情监测…
-选择使用什么特征(Choosing what features to use):
选择合适的特征对于异常检测来说更重要。
特征尽量符合高斯分布,如果不符合,通过变化使其尽量满足高斯分布。
二、推荐系统
-成本函数:
J
(
w
(
1
)
,
.
.
.
,
w
(
n
u
)
b
(
1
)
,
.
.
.
,
b
(
n
u
)
)
=
1
2
∑
j
=
1
n
u
∑
i
:
r
(
i
,
j
)
=
1
(
w
(
j
)
⋅
x
(
i
)
+
b
(
j
)
−
y
(
i
,
j
)
)
2
+
λ
2
∑
j
=
1
n
u
∑
k
=
1
n
(
w
k
(
j
)
)
2
J\begin{pmatrix}w^{(1)},..., w^{(n_{u} )} \\b^{(1)},..., b^{(n_{u} )} \end{pmatrix}=\frac{1}{2} \sum_{j=1}^{n_{u}} \sum_{i:r(i,j)=1}^{} (w^{(j)}\cdot x^{(i)} + b^{(j)} -y^{(i,j)})^{2} +\frac{\lambda }{2} \sum_{j=1}^{n_{u} } \sum_{k=1}^{n}(w_{k}^{(j)} ) ^{2}
J(w(1),...,w(nu)b(1),...,b(nu))=21j=1∑nui:r(i,j)=1∑(w(j)⋅x(i)+b(j)−y(i,j))2+2λj=1∑nuk=1∑n(wk(j))2
-协同过滤(collaborative filtering):
m
i
n
w
(
1
)
,
.
.
.
,
w
(
n
u
)
b
(
1
)
,
.
.
.
,
b
(
n
u
)
x
(
1
)
,
.
.
.
,
x
(
n
m
)
J
(
w
,
b
,
x
)
=
1
2
∑
(
i
,
j
)
:
r
(
i
,
j
)
=
1
(
w
(
j
)
⋅
x
(
i
)
+
b
(
j
)
−
y
(
i
,
j
)
)
2
+
λ
2
∑
j
=
1
n
u
∑
k
=
1
n
(
w
k
(
j
)
)
2
+
λ
2
∑
i
=
1
n
m
∑
k
=
1
n
(
x
k
(
i
)
)
2
\begin{matrix}min \\w^{(1)} ,...,w^{(n_{u} )} \\b^{(1)} ,...,b^{(n_{u} )} \\x^{(1)} ,...,x^{(n_{m} )} \end{matrix}J(w,b,x)=\frac{1}{2} \sum_{(i,j):r(i,j)=1}^{} (w^{(j)}\cdot x^{(i)} + b^{(j)} -y^{(i,j)})^{2} +\frac{\lambda }{2} \sum_{j=1}^{n_{u} } \sum_{k=1}^{n}(w_{k}^{(j)} ) ^{2} +\frac{\lambda }{2} \sum_{i=1}^{n_{m} } \sum_{k=1}^{n}(x_{k}^{(i)} ) ^{2}
minw(1),...,w(nu)b(1),...,b(nu)x(1),...,x(nm)J(w,b,x)=21(i,j):r(i,j)=1∑(w(j)⋅x(i)+b(j)−y(i,j))2+2λj=1∑nuk=1∑n(wk(j))2+2λi=1∑nmk=1∑n(xk(i))2
进行梯度下降:
{
w
i
(
j
)
=
w
i
(
j
)
−
α
∂
∂
w
i
(
j
)
J
(
w
,
b
,
x
)
b
(
j
)
=
b
(
j
)
−
α
∂
∂
b
(
j
)
J
(
w
,
b
,
x
)
x
k
(
i
)
=
x
k
(
i
)
−
α
∂
∂
x
k
(
i
)
J
(
w
,
b
,
x
)
\left\{\begin{matrix}w_{i}^{(j)} =w_{i}^{(j)}-\alpha \frac{\partial }{\partial w_{i}^{(j)}} J(w,b,x) \\b_{}^{(j)} =b_{}^{(j)}-\alpha \frac{\partial }{\partial b_{}^{(j)}} J(w,b,x) \\x_{k}^{(i)} =x_{k}^{(i)}-\alpha \frac{\partial }{\partial x_{k}^{(i)}} J(w,b,x) \end{matrix}\right.
⎩
⎨
⎧wi(j)=wi(j)−α∂wi(j)∂J(w,b,x)b(j)=b(j)−α∂b(j)∂J(w,b,x)xk(i)=xk(i)−α∂xk(i)∂J(w,b,x)
-均值归一化(Mean normalization):
加快算法运行速度,当用户评价很少时,可以使算法给出更好、更合理的预测。
-寻找相关特征(Finding related items):
通过特征值之间的距离,来查找相似的数据,进行相似电影的推荐。
∑
l
=
1
n
(
x
l
(
k
)
−
x
l
(
i
)
)
2
\sum_{l=1}^{n} (x_{l}^{(k)} -x_{l}^{(i)})^{2}
l=1∑n(xl(k)−xl(i))2
-协同过滤的局限性:
- 对于新项目,无法进行合理预测。
- 分析哪些特征进行预测也是一个需要考虑的问题。
-协同过滤vs基于内容过滤(Collaborative filtering vs Content-based filtering):
协同过滤:根据用户已给出的评价来推荐项目
基于内容过滤:在用户特征和项目特征寻找匹配来推荐
-基于内容过滤的深度学习方法(Deep learning for content-based filtering):
对于用户特征和项目特征,一般情况下它们维度不同,因此先进行神经网络将其转化为同维度,算出两者的点积,则为评分。
-从大型目录中推荐(Recommending from a large catalogue):
- 检索(Retrieval):生成大量可能的项目候选者列表。
- 排名(ranking):将上一个步骤的项目通过学习模型进行排名,从而推荐给用户。
-推荐系统中的伦理:
传播正能量,文明你我他!
-降低特征向量(Reducing the number of features):
PCA:如果有大量的特征,经过处理(把多个特征合并为一个)得到2-3个特征,从而可以进行绘图和可视化。
-PCA算法(PCA Algorithm):
执行PCA之前,先进行特征缩放;添加z轴,其他数据分别投影到z轴上,数据在z轴上要尽量分散。
PCA可以通过重建,近似地反推出原数据的特征值。
三、强化学习
-什么是强化学习(What is Reinforcement Learning?):
强化学习就像训狗,告诉它做什么好,而不是应该做什么好,让它根据情况自己做出判断。
-强化学习的回报(The Return in reinforcement learning):
R
e
t
u
r
n
=
R
1
+
r
R
2
+
r
2
R
3
+
.
.
.
,
r
=
0.9
Return = R_{1} + rR_{2} + r^{2} R_{3} + ... ,r = 0.9
Return=R1+rR2+r2R3+...,r=0.9
强化学习的目标是找到一个策略,告诉你在每个状态下采取什么行动以最大化回报。
-审查关键概念(Review of key concepts):
状态(states)、动作(actions)、奖励(rewards)、折扣因子(discount factor)、回报(return)、决策(policy)。
马尔可夫决策过程MDP(Markov Decision Process):未来仅取决于当前状态,而不取决于达到当前状态之前发生的任何事情。
-状态-动作价值函数定义(State-action value function definition):
Q(s,a) =
1.从状态s开始
2.执行一次a动作
3.执行动作后,计算最大回报
-贝尔曼方程(Bellman Equation):
Q
(
s
,
a
)
=
R
(
s
)
+
γ
m
a
x
a
′
Q
(
s
′
,
a
′
)
Q(s,a)=R(s)+\gamma \underset{{a}' }{max} Q({s}',{a}')
Q(s,a)=R(s)+γa′maxQ(s′,a′)
-随机环境(random stochastic environment):
Q
(
s
,
a
)
=
R
(
s
)
+
γ
E
(
m
a
x
a
′
Q
(
s
′
,
a
′
)
)
Q(s,a)=R(s)+\gamma E(\underset{{a}' }{max} Q({s}',{a}'))
Q(s,a)=R(s)+γE(a′maxQ(s′,a′))
-示例:连续状态空间应用(Example of continuous state applications):
s
=
[
x
y
θ
x
˙
y
˙
θ
˙
]
s=\begin{bmatrix}x \\y \\\theta \\\dot{x} \\\dot{y} \\\dot{\theta} \end{bmatrix}
s=
xyθx˙y˙θ˙
-状态值函数(Learning the state-value function):
DQN(DeepQ-Network)算法:使用深度学习和神经网络来训练模型从而学习Q函数。
原理:先假设出Q函数,然后得出结果(x,y)(其中y = Q(s,a)),导入神经网络进行验证,一步步修改神经网络使其逐渐拟合。
-算法改进:改进的神经网络架构(Algorithm refinement:Improved neural network architecture):
修改神经网络单个输出为多个输出。
-算法改进:ε-贪婪策略(Algorithm refinement:ε-greedy policy):
思路:大概率(0.95)情况下,采取最大化Q(s,a),执行最合适的动作;小概率(ε=0.05)情况下,执行随机动作;使神经网络能够克服它自己的先入为主。
-算法改进:小批量和软更新(Algorithm refinement:Mini-batch and soft update):
小批量:当数据集过大时,我们选取它的子集来训练神经网络。
软更新:W = 0.01Wnew + 0.99W、B = 0.01Bnew + 0.99B。