专栏名称: TFT小组
XDF土鳖,CMU码农, 分享口语学习经验, 分享北美留学感受。
目录
相关文章推荐
北美留学生观察  ·  爱尔兰成留学黑马:“低成本留学+毕业即拿工签”双赢 ·  22 小时前  
移民(微博搜索)  ·  移民(微博搜索)-20250309-2 ·  2 天前  
移民(微博搜索)  ·  移民(微博搜索)-20250309-2 ·  2 天前  
移民(微博搜索)  ·  移民(微博搜索)-20250309-2 ·  2 天前  
移民(微博搜索)  ·  移民(微博搜索)-20250309-2 ·  2 天前  
北美留学生观察  ·  刷爆热搜的Manus到底是个啥?AI完全替代 ... ·  3 天前  
LeaderCareer  ·  【2024】队长申请战绩榜:312份英国G5 ... ·  3 天前  
51好读  ›  专栏  ›  TFT小组

50 行代码搞定超热门机器学习模型

TFT小组  · 公众号  · 留学  · 2019-07-11 20:30

正文

2014年,蒙特利尔大学的Ian Goodfellow和他的同事们发表了一篇令人惊叹的论文,向全世界介绍了GAN(Generative Adversarial Networks)。


通过创新地将计算图谱和博弈论组合,他们展示,如果有足够的建模能力,两个相互对抗的模型将能够通过普通的反向传播进行共同训练。


自2014年Ian Goodfellow提出了GAN以来,业界对GAN的研究可谓如火如荼。各种GAN的变体不断涌现,下图是GAN相关论文的发表情况:



大牛Yann LeCun甚至评价GAN为 “ Adversarial Training is the coolest thing since sliced bread ”。


GAN的基本结构


GAN的两个 Model 分别扮演不同的角色(也就是对抗)。 给定一些真实的数据集R,G是 生成器(Generator) ,试图创建看起来像真实数据的假数据,而D是 判别器(Discriminator) ,从真实的集合或G中获取数据并标记差异。


Goodfellow举了一个 生动的例子 来说明GAN:G就像一群伪造者,试图将真实的绘画与他们的仿制的画输出相匹配,而D则是试图分辨出来的侦探团队。(除非在这种情况下,伪造者G永远不会看到原始数据,只有鉴别器D可以看到和判断——G就像是盲人伪造者。)



在理想的情况下,D和G都会随着时间的推移而变得更好,直到G基本上能够制造出让D区分不了的数据,G本质上成为真正物品的“主伪造者”,而D则不知所措,“无法区分这两种分布”。


在实践中,Goodfellow所展示的是G将能够对原始数据集执行一种无监督学习形式,找到某种方式以非常低维的方式表示该数据。



正如Yann LeCun所说:“ 无监督学习是真正人工智能的‘蛋糕’ 。绝大多数人类和动物的学习方式是非监督学习。如果智能是个蛋糕,非监督学习才是蛋糕主体,监督学习只能说是蛋糕上的糖霜奶油,而强化学习只是蛋糕上点缀的樱桃。现在我们知道如何制作“糖霜奶油”和上面的“樱桃”, 但并不知道如何制作蛋糕主体。我们必须先解决关于非监督学习的问题,才能开始考虑如何做出一个真正的AI。这还仅仅是我们所知的难题之一。更何况那些我们未知的难题呢?”



这种强大的技术似乎需要一吨的代码才能实现?NoNoNo,使用PyTorch,我们实际上可以在50行代码中创建一个非常简单的GAN。下面就是技术细节了,感兴趣的同学继续往下读。



我们实际上只有5个部分需要考虑:

R: 原始的真实数据集

I: 作为随机噪声放入到Generator里

G: 尝试复制/模仿原始数据集的Generator(生成器)

D: 试图将R的输出分开的Discriminator(鉴别器)

Loop: 实际的“训练”循环,我们需要做的就是两部分:教G来欺骗D和教D辨别G.


1.)R:在我们的例子中,我们假设我们的R就是 Bell Curve。Bell Curve这个函数采用均值和标准差,并返回一个函数,该函数从高斯分布中提供随机产生n个数。在我们的示例代码中,我们将设置平均值(mu)为4.0,标准差(sigma)为1.25。



2.)I:生成器的输入也是随机的,但是为了使我们的代码稍微复杂一点,让我们使用uniform distribution(均匀分布)而不是normal distribution(正态分布)。这意味着我们的模型G不能简单地将输入移位/缩放到复制R,而是必须以非线性方式重塑数据。



3.)G:生成器是标准的feedforward graph - 两个hidden layers,三个linear mapping。我们正在使用tanh激活函数。G将从I获得均匀分布的数据样本,并以某种方式模拟来自R的正态分布样本,并且本身不会看到R(防止抄袭)。



4.)D:discriminator的代码与G的代码非常相似;前向传播包含两个隐藏层。这里的激活函数是sigmoid, 它将从R或G获取样本,并将输出0到1之间的单个标量,辨别为“假”与“真”。



5.)最后,训练循环在两种模式之间交替:首先在真实数据和假数据上训练D,校准label(将其视为警察学院);然后训练G用错误的label愚弄D,这就像是善恶之间的斗争。







请到「今天看啥」查看全文