1. 从将逻辑回归作为自回归模型入手

    1. 以黑白图片为例,xn是指图片中的每个像素,xn要么为0,要么为1,符合伯努利分布,假设为1概率为
    2. 其概率分布为: ,再取对数;
    3. 模型的损失函数就是的负对数即,也称为二元交叉熵;
    4. 逻辑回归的模型是对样本进行线性变换后使用sigmoid激活,,假设线性变换的斜率为a0,偏置为a1,那么对下一个像素的预测就是,其中就是sigmoid函数;
    5. 上面对像素的预测只关联了,这还不够,应该需要关联,因此进行优化,其中n表示编号,不是次方;
    6. 其实只进行了一次线性变换和一次非线性变换(sigmoid),这是不足以描述清楚像素点之间的复杂关系的,因此再次优化,使用深层的神经网络替代逻辑回归,众所周知一般神经网络层数越深,能够表达联系的复杂度越高。
  2. 优化为神经网络作为自回归模型

    1. 神经网络其实就相当于多层逻辑回归叠加的,只不过除了输出和输入层,其他的称为隐藏层,但是每层都相当于一次逻辑回归,隐藏层,其中都是要要学习的参数,那么生成的公式为,其中也是需要学习的参数,至于最后生成0还是1就按=进行抽样,这个模型就叫NADE;
    2. 但是这个模型有个问题,只能处理离散值,那怎么处理连续值呢?
  3. 优化为RNADE作为自回归模型

    1. NADE只能处理离散值的原因主要是像素使用伯努利分布,要想处理连续值的情况,就将伯努利分布修改为高斯分布,输出也是输出μ和而不是,生成像素的时候就按N(μ,)进行抽样;
    2. 这个模型也存在问题,比如训练时必须串行,因为依赖前面的隐藏层,没法并行;它们各个隐藏层的参数不是共享的,比如层的参数是,这对性能和内存都有挑战;
    3. 还有个问题是顺序固定,比如算x9的分布的时候,必须要x1到x8的分布的数据和学习到的参数,这是硬编码,如果把x9和x3位置互换就不知道怎么算了,它不能动态调整使用x2和x1的参数去生成x9的分布(x3的分布就是依赖x2和x1生成的);
  4. 因此又引入了MADE算法作为自回归模型

    1. 首先输入参数,MADE是直接把整幅图x1到xn一次性输入,并行处理后一次性输出,他能这样做的原因就是掩码功能,中间的隐藏层都是使用了掩码来决定这层处理哪几个输入,比如隐藏层的某个节点掩码是2,那它只处理标号小于等于2的,最后的输出层也是有标号的,比如标号3那就是依赖2号和1号,标号1就都不依赖,即便x9和x3换了顺序,只要把掩码也交换了,是不影响输出的;
    2. 但是MADE也存在问题,如果图像维度是1024甚至4096,为了较好的表达能力,H维度一般也比较高比如512、1024等,它的权重矩阵维度又是D×H,D越大,这个权重矩阵的数据量是线性增长的,太贵了;
  5. 因此后来使用RNN的更多

    1. RNN模型图:
    2. RNN参数是固定的,分别是W_hh、W_hy和W_xh,W_xh将独热编码压缩后转为向量编码,独热编码最大也就26个字母,再压缩一下就更小了,W_hh维度与向量编码维度一致也不大,最后的W_hy也是看输出种类,如果是英文字母也才26个,而且W_hh、W_hy和W_xh,W_xh不会因为输入变多而维度变大,权重参数维度是固定的,绿色隐藏层到输出层也许省了几层MLP,不过也影响不了大局;
    3. 但是问题又回到了以前,训练和生成串行的问题,速度太慢了;
  6. 下篇文章再见分晓

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐