小样本论文笔记5:Model Based - [6] One-shot learning with memory-augmented neural networks.

小样本论文笔记5:Model Based - [6] One-shot learning with memory-augmented neural networks


0. 前言

  • 相关资料:
  • 论文基本信息
    • 领域:小样本学习
    • 作者单位:Google DeepMind
    • 发表期刊和时间:ICML2016
  • 一句话总结
    • 提出了 Memory-Augmented Neural Network(MANN)结构,达到了,,,效果。

1. 要解决什么问题

使用带有记忆功能的神经网络Memory-Augmented Neural Network(MANN)元学习算法解决小样本学习问题。一个尺度可变的网络需要符合两点需求:
1、信息必须以特征方式存储在内存中,且具有稳定和易以元素形式访问的性质;
2、参数数量不应该与内存大小绑定
而Neurak Turing Machines(NTM)和内存网络符合这种要求。因此,作者采用MANN进行长期和短期记忆的元学习任务。

2. 用了什么方法

2.1 模型结构
  • 在这里插入图片描述
  • 如图(a)所示,整个训练过程分成多个Episode,每个Episode中包含若干个样本 x x x和对应的标签 y y y,将所有的样本组合成一个序列, x t x_t xt表示在 t t t时刻输入的样本, y t y_t yt表示与之对应的标记,但要注意的是输入时 x t x_t xt y t y_t yt并不是一一对应的,而是错位对应,即 ( x t , y t − 1 ) (x_t,y_{t-1}) (xt,yt1)为tt时刻的输入,这样做的目的是让网络有目的的记住先前输入的信息,因为只有保留有效的信息在下次再遇到同类样本才能计算得到对应的损失。在每个Episode之间样本序列都是被打乱的,这是为了避免网络在训练过程中慢慢记住了每个样本对应的位置,这不是我们希望的。可以看到对于每个单元(图中灰色的矩形块)他的输入信息既有前一个单元输出的信息,又有当前输入的信息,而输出一方面要预测当前输入样本的类别,又要将信息传递给下个时刻的单元,这与LSTM或RNN很相似。
  • 在此基础上作者增加了一个外部记忆模块(如图(b)中的蓝色方框),他用来储存在当前Eposide中所有"看过"的样本的特征信息。怎样去理解他呢?比如网络第一次看到一张狗的照片,他并不能识别出它是什么,但是他把一些关键的特征信息记录下来了,而且在下个时刻网络得知了它的类别标签是狗,此时网络将特征信息与对应的标签紧紧地联系起来(Bind),当网络下次看到狗的照片时,他用此时的特征信息与记忆模块中储存的特征信息进行匹配(Retrieve,真实的实现过程并不是匹配,而是通过回归的方式获取信息,此处只是方便大家理解),这样就很容易知道这是一只狗了。这一过程其实与人类的学习模式非常接近了,但作者是如何利用神经网络实现这一过程的呢?作者引入了神经图灵机(NTM),为了方便下面的讲解此处需要先介绍一下NTM。
2.2 NTM&MANN
  • 在这里插入图片描述

  • 神经图灵机的结构如上图所示,它由控制器(Controller)和记忆模块(Memory)构成,控制器利用写头(Write Heads)向记忆模块中写入信息,利用读头(Read Heads)从记忆模块中读取信息。

  • 在这里插入图片描述

  • 回到本文的模型中(如上图),作者用一个LSTM或前向神经网络作为控制器,用一个矩阵 M t M_t Mt作为记忆模块。给定一个输入 x t x_t xt,控制器输出一个对应的键(Key) k t k_t kt,可以理解为是一个特征向量,这个特征向量一方面要通过写头写入记忆模块,一方面又要通过读头匹配记忆模块中的信息,用于完成分类任务或回归任务。我们先介绍读的过程,假设记忆模块中已经储存了许多的特征信息了,每个特征信息就是矩阵中的一行(特别注意,此处一行不是代表一个特征向量,而是某种抽象的特征。写入的过程并不是将特征向量一行一行地堆放到记忆模块中,写入的过程远比这个复杂),此时我们要计算当前特征向量 k t k_t kt与记忆模块 M t M_t Mt中的各个向量之间的余弦距离 D ( k t , M t ( i ) ) D(k_t,M_t(i)) D(kt,Mt(i))(原文中用 K K K表示,为了避免与 k t k_t kt混淆,特此改为 D D D),然后利用softmax函数将其转化为读取权重 w t r ( i ) w^r_t(i) wtr(i),最后利用回归的方式(加权求和)计算得到提取出来的记忆 r t = ∑ i w t r ( i ) M t ( i ) r_t=\sum_iw^r_t(i)M_t(i) rt=iwtr(i)Mt(i)。控制器一方面将 r t r_t rt输入到分类器(如softmax输出层)中获取当前样本的类别,另一方面将其作为下一时刻控制器的一个输入。

2.3 Least Recently Used Access 最少最近使用原则
  • 写的过程就是描述如何合理有效的将当前提取的特征信息存储到记忆模块中。作者采用了最少最近使用方法(Least Recently Used Access,LRUA),具体而言就是倾向于将特征信息存储到使用次数较少的记忆矩阵位置,为了保护最近写入的信息;或者写入最近刚刚读取过的记忆矩阵位置,因为相邻两个样本之间可能存在一些相关信息。写入的方法也是为记忆模块中的每一行计算一个写入权重 w t w ( i ) w^w_t(i) wtw(i),然后将特征向量 k t k_t kt乘以对应权重,在加上先前该位置保存的信息 M t − 1 ( i ) M_{t-1}(i) Mt1(i)得到当前时刻的记忆矩阵 M t ( i ) = M t − 1 ( i ) + w t w ( i ) k t M_t(i)=M_{t-1}(i)+w^w_t(i)k_t Mt(i)=Mt1(i)+wtw(i)kt。而写入权重 w t w w^w_t wtw计算过程如下:
    w t w ← σ ( α ) w t − 1 r + ( 1 − σ ( α ) ) w t − 1 l u \mathbf{w}_{t}^{w} \leftarrow \sigma(\alpha) \mathbf{w}_{t-1}^{r}+(1-\sigma(\alpha)) \mathbf{w}_{t-1}^{l u} wtwσ(α)wt1r+(1σ(α))wt1lu
    w t − 1 r \mathbf{w}_{t-1}^{r} wt1r 表示上一时刻的读取权重,该值由读的过程计算得到,权重越大表示上一时刻刚刚读取过这一位置储存的信息; σ ( ) \sigma() σ()表示sigmoid函数, α \alpha α表示一个门参数,用于控制两个权重的比例。 w t − 1 l u w^{lu}_{t-1} wt1lu表示上一时刻最少使用权重,其计算过程如下:
    w t l u ( i ) = { 0  if  w t u ( i ) > m ( w t u , n ) 1  if  w t u ( i ) ≤ m ( w t u , n ) w_{t}^{l u}(i)=\left\{\begin{array}{ll} 0 & \text { if } w_{t}^{u}(i)>m\left(\mathbf{w}_{t}^{u}, n\right) \\ 1 & \text { if } w_{t}^{u}(i) \leq m\left(\mathbf{w}_{t}^{u}, n\right) \end{array}\right. wtlu(i)={01 if wtu(i)>m(wtu,n) if wtu(i)m(wtu,n)
    其中, m ( w t u , n ) m(w_t^u,n) m(wtu,n)表示向量 w t u w_t^u wtu中第 n n n个最小的值, n n n表示内存读取次数, w t u w_t^u wtu表示使用权重,其计算过程如下
    w t u ← γ w t − 1 u + w t r + w t w \mathbf{w}_{t}^{u} \leftarrow \gamma \mathbf{w}_{t-1}^{u}+\mathbf{w}_{t}^{r}+\mathbf{w}_{t}^{w} wtuγwt1u+wtr+wtw
    包含三个部分,上个时刻的使用权重 w t − 1 u w_{t-1}^u wt1u γ \gamma γ是衰减系数,读取权重 w t r w^r_t wtr和写入权重 w t w w^w_t wtw,当 w t u ( i ) w_t^u(i) wtu(i)小于 m ( w t u , n ) m(w_t^u,n) m(wtu,n)时表示位置 i i i是使用次数最少的位置之一,那么在下次写入时,使用该位置的概率就更高。
    根据写入权重更新记忆矩阵:
    M t ( i ) ← M t − 1 ( i ) + w t w ( i ) k t , ∀ i \mathbf{M}_{t}(i) \leftarrow \mathbf{M}_{t-1}(i)+w_{t}^{w}(i) \mathbf{k}_{t}, \forall i Mt(i)Mt1(i)+wtw(i)kt,i
    因此,内存可以写入零内存槽或先前使用的槽;如果是后者,那么最少使用的内存就会被删除。

3. 效果如何

3.1 数据集
  • 数据集有两种:
    • 用于分类任务和Omniglot;
    • 从固定参数的高斯过程采样函数,用于回归;

对Omniglot数据集进行了旋转和变换等数据增强操作,利用旋转新增了一些类别;最终1200类用于训练,423类用于测试。并且对图片缩放到20*20.

3.2 Omniglot 分类
  • 在训练10万个Episode(包括5个随机选取的类别和5个随机选取的标签???类别和标签对应吗?),对模型用一系列的测试episode进行测试。在该过程中,没有进行更多的训练,并且模型从未见过Omniglot测试集中的类别。模型表现出了高分类精度:在样本第二次被输入模型时,就获得了在每个episode上82.8%的准确率,第五次出现时,精度94.9%,第10次出现时则表现出98.1%的精度(所以,在测试过程中记忆矩阵也是会改变的?所以才能记住测试集中样本的特征,从而在下次“看见”同类样本时才能“认出来”吗?)
    与人类表现相比,模型效果要优于人类对新样本的识别能力。具体对人类的测试过程如下。参与者的任务细节:

    • 1、对于一张图片,他们必须从1到5选择一个合适的数字标签。
    • 2、然后,那张图片再次出现,参与者需要根据图片的类别标签做一个不计时的预测。
    • 3、然后,图片消失,受试者被给予关于图片标签正确性与否的反馈。
    • 4、正确的标签会被展示无论预测结果准确度高低,目的是让受试者进一步确认正确的预测内容。
    • 5、在一个短期的2s延时之后,一个新的图片会出现,然后重复这个过程。
      并且,有趣的是,即使是MANN第一次碰到新样本,它的分类效果也好于“随机瞎猜”。因为,它会根据“记忆”排斥一些确定的错误选项。这个过程也跟人类参与者的思考过程类似。
      在这里插入图片描述
  • 表2是分别使用5类和15类分类时,MANN与其他结构对比的分类效果。KNN的效果其实还不错。无参,并且对记忆空间无限制。但MANN使用LRUA效果还是有效的,并且随着次数的增多,精度逐步上升。

3.3 回归-拟合从未见过的函数

在这里插入图片描述

  • x值固定,是数据样本,y值是函数值;(a)是MANN经过20个样本之后对x的预测值;(b)是GP产生的函数值。

4. 还存在什么问题&有什么可以借鉴

  • 该算法巧妙的将NTM应用于小样本学习任务中,采用显示的外部记忆模块保留样本特征信息,并利用元学习算法优化NTM的读取和写入过程,最终实现有效的小样本分类和回归。文中提到的长期记忆是通过控制器网络权重参数的更新实现的,因为采用了错位配对的方式,因此要到第二次见到该类别的图像时才能得到相应的损失,并进行反向传递,因此权重更新过程是非常缓慢的,能够保留很久之前的信息(如果权重更新速度很快,可能为了识别新的图片类别,就迅速忘记之前识别过的图片了)。短期记忆是由外部记忆模块实现的,有人可能会觉得这个记忆模块不是随着训练过程不断储存各个时刻的信息吗?为什么叫做短期记忆呢?这是因为作者在两个Eposide之间会清除记忆模块,以避免两个Eposide记忆之间相互干扰,而一个Eposide只是有若干个类别的少量样本构成的,相对于整个学习过程他仍然属于短期记忆。该算法整个思想都非常的新颖,NTM模型也十分的巧妙,作者自己也认为非常接近人类学习认知的模式了,**但不知道是不是因为训练比较困难的原因,该方法并没有大规模的推广。**在学习该文章时,有必要提前了解一下NTM模型的原理,否则学习起来会比较困难。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值