机器学习、人工智能、大数据学习中笔记

机器学习、人工智能、大数据学习中笔记


学习中记得一些笔记:来源:李沐老师《动手学习深度学习_pytorch版本》、李航老师《统计学习方法》、葫芦娃《百面机器学习》《百面深度学习》、网络各种资料。现在是在做笔记,待做完以后再重新整理归类。实时更新。

代码实现

实现卷积层

import torch
import torch.nn as nn

def corr2d(X: torch.tensor, K: torch.tensor) -> torch.tensor:
    """
    步长为1、卷积核大小小于输入大小
    :param K: 卷积核
    :param X: 输入
    :return: 卷积后输出
    """
    n_h, n_w = X.shape
    k_h, k_w = K.shape
    re = torch.zeros((n_h - k_h + 1, n_w - k_w + 1))
    for i in range(re.shape[0]):
        for j in range(re.shape[1]):
            re[i][j] = (X[i:i + k_h, j:j + k_w] * K).sum()
    return re

# test
X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
K = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
print(corr2d(X, K))
tensor([[19., 25.],
        [37., 43.]])
class Cov2d(nn.Module):
    def __init__(self, kernel_size):
        super().__init__()
        self.weight = nn.Parameter(torch.randn(kernel_size))
        self.bais = nn.Parameter(torch.zeros(1))

    def forward(self, x):
        return corr2d(x, self.weight) + self.bais
net = Cov2d([2, 2])
print(net(X))

CrossEntropyLoss

o j o_j oj为为归一化预测的 o o o的第 j j j个元素。
y ^ j = s o f t m a x ( o ) = e x p ( o j ) ∑ k e x p ( o k ) \hat y_j=softmax(o)=\frac{exp(o_j)}{\sum_{k}exp(o_k)} y^j=softmax(o)=kexp(ok)exp(oj)
这里就会发现当 o j o_j oj 足够大时数值会上溢出。一般处理方法是 o j − m a x ( o ) o_j-max(o) ojmax(o)。这样softmax公式就变成了:
s o f m a x ( o ) = e x p ( o j − m a x ( o ) ) ∑ k e x p ( o k − m a x ( o ) ) sofmax(o)=\frac{exp(o_j-max(o))}{\sum_{k}{exp(o_k-max(o))}} sofmax(o)=kexp(okmax(o))exp(ojmax(o))
这样有效防止上溢出。
但对于之后求损失函数:
l = − ∑ k y i l o g ( y ^ i ) l=-\sum_{k}{y_ilog(\hat y_i)} l=kyilog(y^i)
l = − l o g ( y ^ i ) l=-log(\hat y_i) l=log(y^i)
y ^ i \hat y_i y^i足够小时便会下溢出那么对于原公式进行化简:
l = − l o g ( e x p ( o j ) ∑ k e x p ( o k ) ) l=-log(\frac{exp(o_j)}{\sum_{k}exp(o_k)}) l=log(kexp(ok)exp(oj))
l = − o j + l o g ( ∑ k e x p ( o k ) ) l=-o_j+log({\sum_{k}exp(o_k)}) l=oj+log(kexp(ok))

实现nn.seqential

import torch
import torch.nn as nn
from torch.nn import functional as F


class MySequential(nn.Module):
    def __init__(self, *arg):
        super().__init__()
        for block in arg:
            self._modules[block] = block

    def forward(self, x):
        for block in self._modules.values():
            x = block(x)
        return x

验证

net = MySequential(nn.Linear(20, 30), nn.ReLU(), nn.Linear(30, 2))
x = torch.randn((2, 20))
net(x)

输出:

tensor([[ 0.2447, -0.0728],
        [ 0.0344, -0.3802]], grad_fn=<AddmmBackward0>)

这里nn.ReLU 和F.ReLU其实我感觉没有区别。(如果有的话请指正)
x ˊ = { 1 , x >threshold 0 , x <threshold \acute x = \begin{cases} 1, & \text{$x$>threshold} \\ 0, & \text{$x$<threshold} \\ \end{cases} xˊ={ 1,0,x>thresholdx<threshold

机器学习

EM算法

不完全数据: 观测随机变量Y
完全数据:观测随机变量Y和隐随机变量Z
含有隐变量Z的概率模型,目标是极大化观测变量Y关于参数 θ \theta θ的对数似然函数,即 m a x θ L ( θ ) \underset{\theta}{max}L(\theta) θmaxL(θ)
L ( θ ) = l o g P ( Y ∣ θ ) = l o g ∑ z P ( Y , Z ∣ θ ) = l o g ( P ( Y ∣ Z , θ ) P ( Z ∣ θ ) ) L(\theta)=logP(Y|\theta)=log\sum_zP(Y,Z|\theta)=log(P(Y|Z,\theta)P(Z|\theta)) L(θ)=logP(Yθ)=logzP(Y,Zθ)=log(P(YZ,θ)P(Zθ))
L ( θ ) ≥ L ( θ ( i ) ) + ∑ Z P ( Z ∣ Y , θ ( i ) ) l o g P ( Y ∣ Z , θ ) P ( Z ∣ θ ) P ( Z ∣ Y , θ ( i ) ) P ( Y ∣ θ ( i ) ) L ( θ ) = B ( θ , θ ( i ) ) L(\theta)\geq L(\theta^{(i)})+\sum_ZP(Z|Y,\theta^{(i)})log\frac{P(Y|Z,\theta)P(Z|\theta)}{P(Z|Y,\theta^{(i)})P(Y|\theta^{(i)})}\\L(\theta)=B(\theta,\theta^{(i)}) L(θ)L(θ(i))+ZP(ZY,θ(i))logP(ZY,θ(i))P(Yθ(i))P(YZ,θ)P(Zθ)L(θ)=B(θ,θ(i))
要使得 θ ( i + 1 ) \theta^{(i+1)} θ(i+1)使得 B B B最大就即:
θ ( i + 1 ) = a r g m a x θ ( L ( θ ( i ) ) + ∑ Z P ( Z ∣ Y , θ ( i ) ) l o g P ( Y ∣ Z , θ ) P ( Z ∣ θ ) P ( Z ∣ Y , θ ( i ) ) P ( Y ∣ θ ( i ) ) = a r g m a x θ ( ∑ Z P ( Z ∣ Y , θ ( i ) ) l o g P ( Y ∣ Z , θ ) P ( Z ∣ θ ) ) = ( ∑ Z P ( Z ∣ Y , θ ( i ) ) l o g P ( Y , Z ∣ θ ) ) \theta^{(i+1)}=\underset{\theta}{argmax}(L(\theta^{(i)})+\sum_ZP(Z|Y,\theta^{(i)})log\frac{P(Y|Z,\theta)P(Z|\theta)}{P(Z|Y,\theta^{(i)})P(Y|\theta^{(i)})}\\=\underset{\theta}{argmax}(\sum_ZP(Z|Y,\theta^{(i)})log{P(Y|Z,\theta)P(Z|\theta)})\\=(\sum_ZP(Z|Y,\theta^{(i)})log{P(Y,Z|\theta) }) θ(i+1)=θargmax(L(θ(i))+ZP(ZY,θ(i))logP(ZY,θ(i))P(Yθ(i))P(YZ,θ)P(Zθ)=θargmax(ZP(ZY,θ(i))logP(YZ,θ)P(Zθ))=(ZP(ZY,θ(i))logP(Y,Zθ))

隐马尔可夫模型(HMM)是什么

在马尔可夫模型中,每个状态代表了一个可观察的事件,所以,马尔可夫模型有时又称为可视马尔可夫模型(visible Markov model, VMM)。在隐马尔可夫模型(HMM)中我们不知道模型所经过的状态序列,只指导状态的概率函数,也就是说,观察到的事件是状态的随机函数,因此,该模型是一个双重随机过程。其中模型的状态转移过程是不可观察的,即隐蔽的,可观察事件的随机过程是隐蔽的状态转换过程的随机函数。
状态集合 Q = q 1 , q 2 , … , q N ,   ∣ Q ∣ = N Q={q_1,q_2,\dots ,q_N},\text{ } |Q|=N Q=q1,q2,,qN, Q=N
观测集合 V = v 1 , v 2 , … , v M ,   ∣ V ∣ = M V={v_1,v_2,\dots,v_M},\text{ } |V|=M V=v1,v2,,vM, V=M
状态序列 I = i 1 , i 2 , … , i T   i t ∈ Q I={i_1,i_2,\dots,i_T}\text{ }i_t\in Q I=i1,i2,,iT itQ
观测序列 O = o 1 , o 2 , … , o T o t ∈ V O={o_1,o_2,\dots, o_T}o_t\in V O=o1,o2,,oTotV
状态转移矩阵 A = [ a i j ] \mathbf{A}=[a_{ij}] A=[aij]
在t时刻处于状态 q i q_i qi条件下,在 t + 1 t+1 t+1时刻转移到状态 q j q_j qj的概率: a i j = P ( i t + 1 = q j ∣ i t = q i ) a_{ij}=\mathbf{P}(i_t+1=q_j|i_t=q_i) aij=P(it+1=qjit=qi)
观察概率矩阵: B = [ b j ( k ) ] N × M B=[b_j(k)]_{N\times M} B=[bj(k)]N×M
在t时刻处于状态 q i q_i qi条件下生成观察 v k v_k vk的概率:
b j ( k ) = P ( o t = v k ∣ i t = q j ) b_j(k)=\mathbf{P}(o_t=v_k|i_t=q_j) bj(k)=P(ot=vkit=qj)
初始概率向量: π i = P ( i i = q i ) \pi_i=P(i_i=q_i) πi=P(ii=qi)
在时刻 t = 1 t=1 t=1处于状态 q i q_i qi的概率:
π i = P ( i 1 = q i ) \pi_i=P(i_1=q_i) πi=P(i1=qi)
隐马尔科夫模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)
隐马尔可夫模型需要满足两个条件:

  1. 齐次马尔可夫假设:在任意时刻 t t t的状态只依赖于时刻 t − 1 t-1 t1
    P ( i t ∣ i t − 1 , o t − 1 , … , i 1 , o 1 ) = P ( i t ∣ i t − 1 ) P(i_t|i_t-1,o_t-1,\dots,i_1,o_1)=P(i_t|i_t-1) P(itit1,ot1,,i1,o1)=P(itit1)
  2. 观测独立性假设:任意时刻的观测只依赖于该时刻的状态。
    P ( o t ∣ i T , o T , i T − 1 , … , i 1 , o 1 ) = P ( o t ∣ i t ) P(o_t|i_T,o_T,i_{T-1},\dots,i_1,o_1)=P(o_t|i_t) P(otiT,oT,iT1,,i1,o1)=P(otit)
  • 隐马尔科夫模型三个基本问题:
  1. 概率计算
    已知 λ = ( A , B , π ) 和 O = o 1 , o 2 , … , o T \lambda=(A,B,\pi)和O={o_1,o_2,\dots,o_T} λ=(A,B,π)O=o1,o2,,oT,计算 P ( O ∣ λ ) P(O|\lambda) P(Oλ)
    表示给定模型 λ \lambda λ t t t和之前的序列 O O O,且 o t o_t ot状态为 q i q_i qi的概率
  2. 学习
    已知 O = o 1 , o 2 , … , o T O={o_1,o_2,\dots,o_T} O=o1,o2,,oT,计算 λ ∗ = a r g m a x P ( O ∣ λ ) \lambda^*=\mathbf{argmax}P(O|\lambda) λ=argmaxP(Oλ)
    (得到观测序列重构模型 λ \lambda λ所以HMM为生成式模型
  3. 预测 (encoder)
    已知 λ = ( A , B , π ) 和 O = o 1 , o 2 , … , o T \lambda=(A,B,\pi)和O={o_1,o_2,\dots,o_T} λ=(A,B,π)O=o1,o2,,oT计算 λ ∗ = a r g m a x P ( I ∣ O , λ ) \lambda^*=\mathbf{argmax}P(I|O,\lambda) λ=argmaxP(IO,λ)
    已知模型和序列可以预测未来状态或者重构其他序列。
  • 观测序列生成算法:
    • 输入:隐马尔科夫模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),观测序列长度 T T T
    • 输出:观测序列 O = o 1 , o 2 , … , o t , … , o T O={o_1,o_2,\dots,o_t,\dots,o_T} O=o1,o2,,ot,,oT
  1. 初始状态有 π \pi π产生状态 i 1 i_1 i1
  2. t = 1 t=1 t=1
  3. 由状态 i t i_t it的观测概率分布 b j ( k ) b_j(k) bj(k)生成 o t o_t ot
  4. 由状态 i t i_t it的状态转移分布 a i j a_{ij} aij生成
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值