TowardsDataScience 博客中文翻译 2016~2018(一百二十一)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

《权力的游戏》第 7.5 季第 1 集

原文:https://towardsdatascience.com/game-of-thrones-season-7-5-episode-1-27bdc906e6df?source=collection_archive---------10-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

绘制大图

在第一集里,我们将使用动画展示整个网络在七季中的“拓扑结构”,来鸟瞰不断发展的角色共现网络。这些图表也将向我们展示随着故事的展开,人物的位置在网络中是如何变化的。

Character Co-appearance Network

阅读网络

在深入研究之前,先了解一下图表的内容,以帮助理解它们。

**节点。**节点代表单个人物,七季共有 557 个。为了给每个角色的重要性一个感觉,出现在更多场景中的角色的节点更大,主要角色(147 个常规和重复出现的角色)的节点为绿色。次要角色的节点是粉红色的,当然也很小。

角色在第一次出现在场景中时进入网络,在被杀或以其他方式死亡时退出(100 个主要角色的命运)。次要人物如果连续五集没有出现,以后也不会再出现,也会退出。那些后来重新出现的仍然存在,缺失的连接向图的中心漂移,直到它们重新出现并重新连接。

棱角分明。边缘连接在特定场景中共同出现的角色。在 557 个字符中,有 3849 条边(~ 7/字符)。当角色第一次一起出现在场景中时,边缘被添加。主要角色之间的边被认为是永久的——一旦两个主要角色同时出现,除非其中一个或两个被杀死或死亡,否则会有一条边将他们连接起来。如果角色没有连续五集同时出现,或者一集或两集退出网络,则涉及次要角色的边缘被移除。这种差异反映了主要角色之间的联系可能会持续下去,尽管他们最近没有共同出现——例如,史塔克或兰尼斯特家族成员之间的联系,尽管他们走的是分开的(和断开的)道路。

边缘也标志着关系的性质。较厚的边表示更频繁的共同出现,因此关系“更强”。领带的基调反映在它们的颜色上,较红(较蓝)的边缘表示在武装场景中更频繁(不太频繁)的共同出现,因此更具战斗性(亲切)的关系。略带紫色的边缘混合了友好和敌对的共同出现,因此可能反映了一起对抗敌人的朋友,或者后来成为敌人的朋友(或者反之亦然)。

**布局。**使用“力导向”算法生成图形,在该算法中,未连接的节点被推开,而连接的节点被拉在一起。这赋予了字符在图形中的位置以意义。图中同处一地的角色在场景中更频繁地一起出现。并且,当一组字符倾向于彼此频繁地共同出现时,这些字符将聚集在一起。与倾向于不一起出现的字符一起出现的字符占据这些字符之间的位置,这些字符本身位于图形的不同区域。

现在你知道了“阅读”图表所需的一切,并赋予图表中角色的位置和运动以意义。多看几次图表动画,看看你是否能跟踪图表中展开的故事线,并理解演变中的网络。

图表特征和趋势

在未来的剧集中,我们会对该图的几个特征感兴趣。我将在这里介绍其中的几个,这样我们可以在以后的章节中更深入(更精确)地挖掘它们(以及其他的)。

**小集团。**一个值得注意的特点是,该网络在该系列的大部分时间里都以“派系”结构为特征,在这种结构中,相对不同的角色群围绕支撑他们的主要角色展开故事线——正如边缘颜色所显示的那样,一些角色比其他角色更加暴力。

这些“集团”和他们的中心人物,在下一张图中更容易看到,其中经常一起出现的人物群被涂上相似的颜色。因为他们的成员主要是彼此共同出现,所以这些集团(及其成员)在网络中彼此相对孤立——以丹妮莉丝·坦格利安为中心的集团是最孤立的。

Character Co-appearance Network with Clusters Colored

该图的拓扑结构在第七季发生了转变,因为该图汇聚成一个由所有主要角色组成的单一集团。这一转变反映了在面对日益增长的白人沃克威胁时,先前分离的故事线和他们的中心人物合并成一个单一的联盟。

小天地。第二个是,在第七季融合之前,几个主要角色,而不是属于一个小团体,跨在他们之间,将他们的故事线连接起来,并将他们的主要角色连接成一个单一的网络图。例如,提利昂·兰尼斯特在网络中跨越多个派系,席恩·葛雷乔伊也是如此。另一些人,比如琼恩·雪诺,既以小集团为中心,又在他们之间牵线搭桥。

这种拓扑结构——由少量桥连接起来的密集互连的集团——是标志性的“小世界”网络,在社会(以及生物和技术)系统中无处不在。因此,有趣的是,这种拓扑结构也出现在这些虚构的土地上,不管有没有该系列创作者/作者的意图。

在小世界网络中,尽管大多数节点主要连接到集团内相对少量的其他节点,但是它们之间的路径很短,因为少量节点“桥接”该集团。小世界网络结构表现出重要的特征,包括信息在网络中快速传播只需几步,以及对节点丢失的鲁棒性,其中大多数对路径的长度或网络的集团性几乎没有影响。

当艾德·史塔克(奈德·史塔克)失去理智,以及他的妻子和儿子凯特琳和罗柏在“红色婚礼”中死去时,这种坚强都显而易见。从动画中可以明显看出,图形的拓扑结构几乎没有因为它们的退出而改变。因为与他们一起出现的角色也倾向于彼此一起出现(他们的边缘颜色相对统一——灰色、紫色;凯特琳和罗柏,绿色),它们的边是“冗余的”,网络拓扑对它们的消亡是鲁棒的。

相比之下,像提利昂·兰尼斯特这样的“桥接”角色的边并不是多余的,它们的丢失会极大地改变拓扑结构。

( )没有提利昂的世界 。为了说明这一点,我贴了一张图,图中提利昂受到了“乔治-贝利-这是一种美妙的生活”的待遇。除去他的节点和所有的边,图的中心大部分是空的,派系几乎没有联系(但对席恩·葛雷乔伊来说,尤其是在红色婚礼之后),并且在第七季汇合之前一直如此……这很大程度上取决于提利昂的联系,在他缺席的情况下不太可能。可以在这里 查看 。)

**短暂的联系。**突出这些网络特征的另一种方式是,如果主要人物和次要人物没有在连续五集内共同出现,或者其中一个或两个人物退出,则通过丢弃所有边缘,在故事的更窄时间窗口内绘制共同出现网络。

5-episode edge windows.

因为这个图表是基于最近的共同出现(活跃的联系)绘制的,所以派系之间的联系更为稀疏,正如那些从一个派系跳到另一个派系的桥牌人物一样,他们通过网络与人物建立联系。例如,观察提利昂·兰尼斯特在网络中的移动。结果是他在早期图表中的中心位置,这些图表假设这些联系是持久的而不是短暂的。

接下来:第二集——这是一个冰与火的小世界

在下一集(下面的链接),我将更详细地研究全球网络结构特征的“统计力学”,量化其各种特征——密度、聚类、路径长度和小世界性——并可能开始挖掘一些主要人物的网络位置和联系。

同时…

新来 GoT 第 7.5 季?在这里查看预告片,以及剧集:

第 1 集— 描绘大局

第 2 集— 冰与火的小世界

第 3 集— 人物网络地位和优势

第四集— 谁会熬过第八季?杀死的网络位置

对“应要求”这一集有什么想法?留下评论,我会看看我能做些什么…

《权力的游戏》第 7.5 季第 2 集

原文:https://towardsdatascience.com/game-of-thrones-season-7-5-episode-2-dd518f6b03c?source=collection_archive---------12-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是一个冰与火的小世界

第一集中,我们使用图表来展示冰与火之地七季中网络的拓扑结构,鸟瞰了不断发展的角色共现网络。我们看到的是一个不均匀的,移动的,模块化的结构。许多角色聚集成密集的小集团,主要是彼此共同出现,由一些共同出现的角色连接,这些角色通过相对较短的路径连接那些不经常共同出现的角色。所有这些特征都是“小世界”网络的特征。

很容易看出这种社会结构是如何普遍出现的。人们倾向于形成“社区”,其中每个人都认识其他人,每个社区的成员倾向于与其他社区的人有一些关系,而一些人——例如政治和社区领导人——与许多社区的人有联系。

在第 2 集,我们将更详细地研究这种拓扑结构,并量化它的一些关键特征——密度聚集桥接路径长度——以得出关于共现网络的更坚定的结论,并准备挖掘网络位置和单个角色的优势。

背景

小世界效应首先出现在斯坦利·米尔格拉姆(1967)的经典研究中,他描述了一个实验,在这个实验中,信件在熟人之间传递,他从中得出结论,许多对看似遥远的人被非常短的熟人链连接起来。在他的研究中,这个链条的典型长度大约是 6,这个数字已经成为民间传说,并在约翰·格尔(1990)的戏剧《六度分离》中被载入史册。尽管米尔格拉姆的研究中存在偏见——例如,路径较长的字母更容易丢失或遗忘——但他的结果通常被视为支持假设的证据,即人口中的大多数人可以通过熟人的短连接路径连接起来,即使是在包含社会结构(如孤立社区或地理和文化障碍)的大型人口中。米尔格拉姆将这种现象称为“小世界效应”。最近, Watts 和 Strogatz (1998) 将这种描述正式化,将小世界定义为展示短路径和社会结构组合的网络,后者的特征在于高度的网络聚集。这两个条件现在被作为小世界的标准定义,揭示了网络拓扑对于理解小世界的本质和运作的重要性。(改编自鲍姆等人,2004 年)。

密度

人物之间的联系有多密集(或者反过来说,稀疏)?我们可以通过考虑组成网络的节点(字符)和边(共现)的相对数量来回答这个问题。这些按情节显示在图 1 中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 1. Character Co-appearance Network — Nodes & Edges

在第一季和第二季中,角色的数量增长很快,然后随着角色引入的放缓和死亡人数的增加,增长速度会变慢。在第六季达到 126 个角色的高峰后,随着故事情节的趋同,角色的数量急剧下降,留下了一些角色,另一些角色死去。在第七季结束时,剩下的角色比第一季第一集中出现的要少。(也许并不令人惊讶——在第一集介绍的 44 个角色中,只有 13 个出现在第七季的大结局中!)

共同出现的数量遵循相同的一般模式,保持每个角色的平均边缘数量相对恒定在 8-9 之间,尽管在第一季和第七季中更大,在 13-16 之间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 2. Character Co-appearance Network — Density

总的来说,边与节点的比率表明连接相对稀疏,或低密度网络。也就是说,实现了相对小部分的可能边(即,如果所有节点都具有与所有其他节点的边)。例如,考虑第 35 集,其中 110 个角色的共同出现创建了 1092 条边。虽然这看起来是一个很大的数字,但它仅代表 11,990 个可能边的 9%的密度(即 110*109)。图 2 显示了网络密度在第 2-6 季中介于 8-10%之间,而在第 1 季早期则下降了 30%以上。密度在第七季中跃升,在最后两集达到近 50%。这一跳跃与我们在《T2》第一集中观察到的转变相吻合,当之前独立的故事线合并,中心人物在面对日益增长的白人沃克威胁时结成联盟时,图表崩溃成一个单一的集团。

使聚集

尽管总体稀疏,但共现网络的图形仍然揭示了一种不均匀的结构,具有稀疏链接的密集聚集区域。但是,共现网络的聚集程度——以及连接的不均匀程度——如何呢?

为了回答这个问题,我们可以计算网络的聚类系数,它测量“封闭三元组”(所有边都被画出的三角形)与“开放三元组”(缺少一条边的三角形)的比率。如果所有的三联体都是“开”的,系数为 0,如果所有的三联体都是“闭”的,系数为 1。当我们在网络图中看到聚类时,我们可以期望找到许多三角形。在共现网络中高比例的“封闭”三元组意味着字符倾向于彼此共现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 3. Character Co-appearance Network — Clustering

图 3 显示了每集的聚类系数以及“随机网络”的聚类系数,该“随机网络”具有与每集中实际网络相同的边数和节点数。随机网络的聚类系数往往很小,这为评估实际网络中的聚类提供了一个基准( Watts & Strogatz,1998 )。

共现网络的聚类系数在 0.7-0.8 之间,但在第一季开始和第七季结束时略高(当时网络密度也更高)。这意味着网络中 70-80%的“三胞胎”是“封闭的”。随机网络的聚类系数低得多,在 0.08-0.09 之间,除了在第一季开始和第七季结束时。因此,对于实际的同现网络,聚类系数要大 8-10 倍。

桥接

既然我们已经量化了集群网络区域,那么让我们来看看贯穿和链接它们的连接。在第一集的图表中,这些“桥梁”似乎是由几个字符与那些往往不会相互出现的字符共同出现造成的——它们形成了“开放”的三元组,通过一条短路径将原本不相连的字符连接起来。

我们可以通过考虑同现网络中的介数中心性的分布来量化这些桥的性质。在下面给出的这些分布的图表中,只包括主要的字符(规则的和重复出现的);次要角色在这两个指标上都得分较低,增加了许多接近零的观察值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 4. Character Co-appearance Network — Betweenness

中间性衡量一个字符位于其他字符之间最短路径上的程度,分数越高表示最短路径越多。如图 4 所示,分布是高度倾斜的。大多数主要人物没有最短路径,少数人有几条最短路径,极少数人有多条最短路径。这种偏斜使得少数字符具有个体意义,它们的高度中间性赋予了它们控制信息流和资源的潜力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 5. Character Co-appearance Network — Degree

是一个给定的字符与其他字符一起出现的次数。如图 5 所示,学位分布也是倾斜的,尽管不太严重。大多数主角每集和 10 个或更少的其他角色一起出现,少数有 10-20 个,极少数超过 20 个。

这些分布的偏斜度的差异反映了一些高度特征位于几条最短路径上。这些字符占据了图形中密集聚集的区域;丹妮莉丝·坦格利安就是一个例子。除了龙之母,低度节点往往属于密集集群,这些集群通过高度(和高介数)节点相互连接。

这种偏斜对网络中节点之间的路径长度有影响。当偏斜度很高时,网络的“直径”——节点之间的最大距离——很大程度上不受网络规模增加的影响( Cohen & Havelin,2003 )。因此,这些分布的偏斜度意味着在共现网络中字符之间的步数相对较少。

路径长度

路径长度是最后的小世界拼图。我们可以通过将字符之间的所有最短路径相加并除以路径总数来计算字符之间的路径长度。下面的图表显示了每集的结果。并且,再次作为基准,对于具有相同数量的节点和边的随机网络。正如我们所见,虽然随机图往往具有较小的聚类系数,但它们也往往具有相对较小的平均路径长度( Watts & Strogatz,1998 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 6. Character Co-appearance Network — Path Length

如图 6 所示,角色之间的平均路径是 2-3 步,除了在第一季和第七季,它低于 2 步。虽然比表征随机网络的短路径稍长,但是桥确实导致了预期的短距离偏斜。沿着这些短路径,只需几步,信息就能迅速到达网络的其他遥远区域。

世界真小

在数量上,我们发现同现网络的特征是高度模块化的,与具有相同数量的节点和边的随机网络相比,具有更高的聚类和几乎一样短的平均路径长度。我们可以使用这些见解来计算小世界商 (Q)以量化共现网络拓扑的“小世界性”。

q 比较实际(a)网络与节点和边数相同的随机®网络的聚类系数(CC)和平均路径长度(PL)。具体来说,Q = [CC(a)/CC®]/[PL(a)/PL®]。一个网络的 CC(a) >> CC®和 PL(a) ~ PL®越多,它就越“小世界”,Q 就越大,如果 Q > 1,就说这个图是一个小世界。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 7. Character Co-appearance Network — Small World Quotient

从我们早期对聚类和路径长度的研究中,我们知道 CC(a)比 CC®大 8-10 倍,并且 PL(a) ~ PL®,所以我们预计 Q > 1。

图 7 证实了这一点。在第一季和第二季中,q 从 2 上升到 8,然后在 5-8 之间波动,直到第六季的 9 左右达到峰值,然后迅速下降。到第七季结束时,Q 值已经下降到接近 1,这个小世界崩溃了,因为核心人物在面对白衣行者威胁时形成的联盟将网络折叠成了一个小团体。

好吧。那就证实了。这的确是一个冰与火的小世界……嗯,对于七季中的大部分来说。

接下来:第 3 集—网络地位和优势

在下一集(下面的链接),我们将把注意力转向网络中的角色。谁在网络中处于有利位置?谁失去或浪费了一个网络优势?谁有权力控制信息和资源的流动?谁能赢得信任和忠诚?他们是如何拥有(或失去)这些网络优势的?

同时…

新来 GoT 第 7.5 季?在这里查看预告片,以及剧集:

第 1 集— 描绘大局

第 2 集— 冰与火的小世界

第 3 集— 人物网络地位和优势

第四集— 谁会熬过第八季?杀死的网络位置

对“应要求”这一集有什么想法?留下评论,我会看看我能做些什么…

《权力的游戏》第 7.5 季第 3 集

原文:https://towardsdatascience.com/game-of-thrones-season-7-5-episode-3-fcf1f35af7c0?source=collection_archive---------14-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

字符网络的位置和优势

第 2 集中,我们量化了第 1 集中介绍的人物同现网络图拓扑的关键特征,对其结构得出了更为确切的结论,为挖掘个体人物的网络位置和优势奠定了基础。

我们发现共现网络是高度模块化的,密集聚集的区域由穿过它们的纽带稀疏连接。我们还发现这个网络是高度倾斜的——大多数角色在角色之间只有很少的连接或最短的路径,而少数角色有很多连接和最短的路径。这种偏斜也意味着网络中的字符之间相对较少的步骤,我们确实发现了这一点。

最后,为了量化共现网络的“小世界性”,我们将它的聚类和路径长度与节点和边数相同的随机网络进行了比较。同现网络具有小世界的特征,它比随机网络更聚集,但路径长度相似。然而,我们也看到,小世界结构在第七季结束时崩溃了,因为主要人物建立了更广泛的联盟来面对白行者,网络折叠成一个单一的小团体。

唷。我们在第二集做了很多!

在第三集,我们将注意力转向主要角色——常规角色和循环角色——在角色共现网络中的位置。谁处于有利地位?谁有机会控制信息和资源的流动?谁能赢得信任和忠诚?

网络位置和优势

在我们深入角色的网络位置之前,我们需要知道要寻找什么;也就是说,什么样的立场可能是有利的。社交网络研究表明,网络位置可以影响其居住者的结果,并指出两种位置——密集和稀疏——可以为其居住者创造不同的优势和更好的结果。

紧密结构中的网络职位——由与已经联系在一起的其他人的关系组成的职位——通过促进互惠规范和制裁机制、信任和共同身份的发展而使其占有者受益,所有这些都促进了高水平的合作和协调,从而可以促进合作并限制机会主义。

稀疏结构中的网络职位——由与其他人没有已经链接的关系组成的职位——通过将他们置于原本不相连的群体之间,让他们接触并有机会控制网络中流动的各种信息和资源,使他们受益,所有这些都能够更好地预测问题并利用新的机会。

听起来熟悉吗?我当然希望如此!这些位置反映了小世界网络的两种定义结构,它们由密集的参与者集群组成,跨越这些集群的稀疏的连接穿过它们,通过短路径将本地集群的不同区域绑定到一个更大的网络中,并充当信息交换和控制的管道。小世界网络——像角色共同出现网络——因此为两种利益提供了机会。

小世界结构的重要性在于,通过结合密集和稀疏,它们创建了一种“混合”关系结构,该结构通过提供跨网络区域的不同信息的有效通道来增强信息扩散和处理属性,同时保持高度信任和信息共享的好处。

因此,虽然密集和稀疏网络位置通常被描述为竞争选项,迫使在信任、信息共享和协作的好处与信息和资源访问和控制的好处之间进行权衡,但是来自小世界网络的基本见解表明,它们是互补的好处,并且密集和稀疏的组合在网络位置中可能是有利的。

网络位置(如网络结构)可以通过减轻过度密度(如隔离和约束)和过度稀疏(如机会主义和不稳定性)的影响,并通过将本地集群内密度的信任和整合优势与跨集群的稀疏关系的信息访问和代理优势结合起来,获得优于纯密集或稀疏位置的优势。

字符网络位置——密集还是稀疏?

那好吧。那么《王座》的游戏主角们都为自己开拓了哪些网络阵地呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 1. Character Co-appearance Network Clustering and Betweenness

所有种类都出现了!图 1 显示了《权力的游戏》中 13 个关键角色的网络位置的密度(聚类)和稀疏性(介数)的混合特征。聚类和介数是跨集的平均值,节点大小反映了跨集的累积程度。女性角色的节点是蓝色的;对于男性,红色。人物的位置从密集(丹妮莉丝·坦格利安)到稀疏(提利昂·兰尼斯特),混合两者来填充极端之间的连续体。其他 134 个常规和重复出现的字符主要在左上角添加观察结果;因此,关键字符往往表现出最高的介数(和最低的聚类)。

Figure 2. Character Co-appearance Network Clustering and Betweenness Animation

图 2 显示了这些位置随时间的演变,绘制了集与集之间的时间路径。他们的地位相对稳定,但有几个角色发生了实质性的变化。其中,丹妮莉丝·坦格利安的中间值在第六季早期上升,聚类值下降。从第五季中期到第六季中期,提利昂·兰尼斯特的中间时段也出现了高峰。在下一集,我们将探究这些运动背后的共现模式的变化,以更好地理解这些网络位置是如何发展的,并考虑如何进行“网络运动”来改善它们。

第二集中,度和介数分布的偏斜度表明,一小部分角色可能特别有影响力,因为他们有潜力控制网络上的信息流和资源——以及冰与火的土地。这些“歪斜的少数”是谁?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 3. Character Co-appearance Network Degree and Betweenness

图 3 描绘了同一组关键字符的度和介数。程度和中间性是跨集平均的。节点大小和颜色和以前一样。在这些关键人物中,提利昂·兰尼斯特的度和介度都是最高的;丹妮莉丝·坦格利安最低。一群角色——瑟曦和杰米·兰尼斯特、珊莎和艾莉亚·史塔克、琼恩·雪诺——平均学历很高,但中间程度各不相同。正如我们在第二集中看到的这些度量的分布,高中间性比高程度更罕见。剩余的 134 个常规和重复出现的字符主要将观察结果添加到图的左下方。因此,这些关键人物构成了“扭曲的少数”。

Figure 4. Character Co-appearance Network Degree and Betweenness Animation

图 4 显示了它们在七个季节中的位置变化。除了第四季的后半段,提利昂·兰尼斯特占据着媒介度最高的网络位置。在前 5 个赛季中,琼恩·雪诺在两个维度上都有所上升,但随后在两个维度上都有所下降。艾莉亚、布兰和珊莎·史塔克都有 4-5 集的高间隔期,杰米(但不是瑟曦)兰尼斯特也是如此。这些关键角色的度和介数在第七季中有所收敛和下降。这反映了小世界的崩溃,我们在第一集第一集第一点看到了这个世界的崩溃,在第二集第三点 T2 中量化了这个世界的崩溃,这是这些角色在面对白色行者威胁时结成联盟的结果。如上所述,在下一集,我们将研究这些运动背后的变化共存,以更好地理解它们的发展,并考虑如何制定有益的运动。

人物网络优势——死了还是活着?

既然我们已经看到了关键人物在共现网络中占据的位置范围,我们是否也可以观察到与不同位置相关的不同结果?密集持仓有利吗?稀疏的?混血儿?那“倾斜的少数”呢?一个衡量网络位置好处的标准是评估它们与角色生存的关系。在 147 个经常出现的角色中,有 100 个死了(只有一个死于“自然”原因)。被杀的角色和幸存的角色是否占据了不同类型的网络阵地?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 5. Dead or Alive? Character Co-appearance Network Clustering and Betweenness

图 5 显示了聚类和介数的混合,它们表征了所有常规和重复出现的字符的网络位置。像以前一样,聚类和介数是跨集平均的,节点大小反映了跨集的累积程度。然而,在这个图中,幸存角色的节点是蓝色的;对于被杀的角色,红色。

这种模式似乎很清楚:群聚杀死,中间保护。除了少数例外,被杀死的角色具有高于 0.5 的聚类和低于 0.02 的介数。聚类在 0.7 以上的性状很少存活。除了奈德、凯特琳和罗柏·史塔克、巴利斯坦·赛尔弥,还有拉姆齐·波顿、瑞卡德·卡史塔克、杰诺斯·史林特和拉斯特。琼恩·雪诺的代号也是“被杀”,但他的复活符合他在网络中的地位。

混合位置似乎也是有益的,其位置具有聚类(0.4-0.6)和中间性(0.02-0.04)混合特征的角色存活率相对较高。

在冰与火的土地上,中间性提供的控制信息流和资源的力量似乎比集群带来的信任、合作和忠诚利益更重要。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 6. Dead or Alive? Character Co-appearance Network Degree and Betweenness

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 7. Dead or Alive? Character Co-appearance Network Degree and Clustering

那么那些有高度和/或中间性的扭曲的少数字符呢?如图 6 所示,这种模式可能更加清晰。在 100 个被杀死的常规和重复出现的角色中,只有两个占据了平均度超过 20 且介数超过 0.02 的网络位置——奈德·史塔克和琼恩·雪诺,当然,他还活着回来。

为了完整起见,图 7 显示了度和聚类的模式。如图 5 所示,虽然聚类低于 0.5 的字符很少被删除,但低聚类比高介数提供的保护更有限。不过,唯一被杀的角色平均等级超过 20,聚集度低于 0.6 的还是奈德·史塔克和琼恩·雪诺。

因此,看起来网络位置确实对冰与火之地的生存至关重要——度和介数保存;群聚杀人。

即将上映:第四集——生还是死?

在下一集,我们将把注意力转向更详细的角色死亡建模,以及为第七季结束时还活着的主要角色生成生存预测。

同时…

新来 GoT 第 7.5 季?在这里查看预告片,以及剧集:

第 1 集— 描绘大局

第 2 集— 冰与火的小世界

第 3 集— 人物网络地位和优势

第四集— 谁会熬过第八季?杀死的网络位置

对“应要求”这一集有什么想法?留下评论,我会看看我能做些什么…

《权力的游戏》第 7.5 季第 4 集

原文:https://towardsdatascience.com/game-of-thrones-season-7-5-episode-4-abb12ee1e43d?source=collection_archive---------10-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

谁会在第八季中幸存?杀人的网络位置

第三集中,我们描述了《权力的游戏》中关键人物的网络位置在密度和稀疏度方面的优势。

为了衡量角色的网络优势,我们比较了被杀和幸存角色的网络位置。模式很清楚:占据密集位置的角色更有可能死亡,那些占据稀疏位置的角色更有可能存活。在冰与火的土地上,基于中间性的信息和资源访问和控制似乎胜过了与集群相关的信任、忠诚和合作。“扭曲的少数人”——凭借对网络上信息和资源流动的潜在控制而获得影响力的高级角色——也更有可能在第七季结束时活着。

在第 7.5 季的这一集中,我们将注意力转向一个更详细的建模,即角色的生存如何受到他们在共同出现网络中的位置的影响。我们将使用两种机器学习分类器算法——N朴素贝叶斯决策树——根据每个主要(定期和反复出现的)角色的网络位置的关键特征(聚类、中间和程度),以及他们的性别和家庭地位(伟大、次要、普通),预测他们最有可能的结果——死亡或活着。然后,我们将应用这些预测来评估第八季中关键幸存角色的可能命运。

朴素贝叶斯分类器

朴素贝叶斯是一种简单的算法,作为概率分类器工作。它通过确定角色属性与死亡或活着相关联的概率来预测每个角色最有可能的结果(死亡或活着),并将角色分配给具有给定属性的最大概率的结果。贝叶斯分类器表现很好,根据性别、家庭状况和网络位置,对第一至第七季 140 个角色中的 114 个(82.4%)角色的命运进行了正确分类。

性别和房屋

让我们简单地开始,通过考虑男性和女性角色最可能的结果,以及那些大家族成员和那些小家族成员或平民的角色。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 1. Gender, House and Character Survival

图 1 显示了基于性别和房子的预测:来自大房子的男性最有可能被杀。

男性角色在死者中占了很大比例,占所有死亡人数的 77%,但占幸存者的 70%,因此大约有 10%的人死于非命。相比之下,女性在死者中的比例较低,占死亡人数的 23%,幸存者的 30%,因此死亡的可能性比活着的可能性低 30%。

大家族成员的角色也过多,占所有死亡的 44%,但占幸存者的 36%,因此大约有 20%的人死于非命。相比之下,较小家族的成员和平民在幸存者(64%)中所占的比例要高于死亡人数(56%),因此死亡的可能性比活着的可能性低 15%。

给定这些分布,朴素贝叶斯分类器预测大家族的男性成员最可能的结果是被杀,而不是大家族成员的女性成员最可能的结果是活着。

网络位置

现在让我们看看基于角色网络位置关键属性的概率——它们的聚类、介数和度。

**聚类。**为了加强《T2》第三集中的图形分析,图 2 表明聚集对你不好。在图中,无论蓝线(死亡的密度)在红线(活着的密度)之上,朴素贝叶斯算法都预测最有可能的结果是死亡。

平均聚类系数大致大于. 7 的角色(即 70%的三和弦是闭合的,见第 2 集)更有可能被杀死,而聚类系数较低的角色更有可能活着。请注意,差异非常大,聚类非常高的角色被杀死的可能性是两倍多,而聚类低的角色存活的可能性是三倍或更多。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 2. Clustering Coefficient and Character Survival

聚类与角色命运的关联表明,通过增加聚类,小世界结构的崩溃和网络在第七季结束时折叠成一个单一的小团体,这是为了面对白行者而建立的联盟(见第 2 集)可能会降低许多角色的生存机会。

**介于两者之间。**图 3 显示了中间性的分类。再次强调《T2》第三集中的图形分析,介于之间对你有好处。平均介数大于大约 0.02 的角色更有可能活着,而那些介数分数较低的角色更有可能被杀死。事实上,介数低于 0.02 的角色被杀的可能性是普通角色的两倍多,而介数较高的角色存活的可能性是普通角色的 10 倍。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 3. Betweenness and Character Survival.

正如第七季结尾小世界的崩溃增加了许多角色的聚集,这个网络过渡也降低了他们的介数。考虑到中间性与角色被杀的可能性之间的联系,联盟的融合很可能通过其对中间性和聚类的影响减少了许多角色的生存机会。

度。最后,我们来看看学位的分类。比如中间性,再次加强第三集的图形分析,度数对你有好处。平均度数大于 12 左右的人物更有可能活着,而度数较低的人物更有可能被杀死。等级高于 12 的角色存活的可能性是 10 倍甚至更多,而等级较低的角色被杀的可能性是 2-3 倍。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 4. Degree and Character Survival.

角色的等级和角色被杀或活着的概率之间的这种联系加强了我们在第三集的图形分析中看到的“少数偏斜者”的生存优势。

决策树分类器

决策树分类器构建了一个分割规则的层次结构,根据角色属性的值将结果(死亡或活着)分开。基于最大化信息增益来确定分裂规则。在每个阶段,所选择的分裂规则是导致最大信息增益的规则;也就是最同质的分支。

图 5 显示了基于角色性别、房屋状况和三个网络位置属性的决策树。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 5. Decision Tree — Killed or Alive?

在树的顶部,第一个分裂规则是字符的平均度数是大于还是小于 29.05。如果更大,则最有可能的结果是存活(在这种情况下,这是唯一的结果——终端节点上的条形指示存活(红色)/死亡(蓝色)结果的分布,以及通过其厚度指示结果的数量)。如果低于(或等于)这个值,最有可能的结果是更复杂。

第二个分裂是平均聚类是大于还是小于. 495。如果低于(或等于)该值,最可能的结果取决于进一步的分裂规则:如果平均度大于 10.85,则存活;如果低于(或等于)该值,则终止。同样,更高的学位与活着联系在一起。如果聚类大于. 495,最有可能的结果取决于介数是大于还是小于. 042。

如果大于这个值,最有可能的结果是被杀死——当伴随着高聚类时,高介数是无益的。如果介数低于(或等于). 042,最可能的结果取决于关于聚类的进一步规则。如果聚类非常高(> . 679),最有可能的结果是被杀死。从末端节点的钢条厚度可以看出,这是大多数杀戮发生的条件。

如果聚类介于小于(或等于). 679(根据第二个规则,也大于. 495)之间,则性别开始起作用,最有可能的结果是女性角色活着,而男性角色进一步取决于程度、家庭地位和中间性。

预言

现在,让我们利用这些结果来做一些预测——对于幸存的主要角色来说,最有可能的结果是什么——死了还是活着?

朴素贝叶斯分类器假设特定属性的值独立于其他每个属性的值,但是我们可以将每个属性的概率相加,以获得不同属性组合的联合条件概率。

表 1 显示了 18 个重要角色被杀的概率。概率是用三种方法计算的。第一,基于角色在第 1-7 季出现的所有剧集的平均网络位置特征,第二,基于第 7 季所有剧集的平均网络位置,第三,基于第 7 季最后一集的网络位置。因此,这三种可能性使我们能够看到人物最有可能的命运的任何趋势。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Table 1. Predicted Probability of Being Killed, Selected Characters

几个角色被杀的概率一直很低;例如,琼恩·雪诺和提利昂·兰尼斯特。贝叶斯模型以很高的可信度预测了他们的生存(以及琼恩·雪诺的复活)。另一些则显示出时间范围内的上升或下降趋势。例如,越来越有信心预测其灭亡的山姆威尔·塔利,以及相反生存变得越来越确定的丹妮莉丝·坦格利安。

对于几个角色来说,贝叶斯分类器预测第 1-7 季最有可能的结果是被杀,但在击败这些可能性后,他们在第 7 季结束时的前景有所改善。例如,Yara Greyjoy 的死亡被充满信心地预测——她几乎是——但她在第七季结束时的网络位置的变化极大地改善了她的未来前景。托蒙德·巨人贝恩的命运也发生了类似的逆转……如果事实证明他确实在柏林墙倒塌后幸存了下来。

兰尼斯特家的命运呈现出不同的轨迹。虽然瑟曦和詹姆的生还被充满信心地预测,但他们的命运在第七季结束时变得更加扑朔迷离,詹姆的命运实际上是一场掷硬币的游戏。瓦里斯勋爵的前景同样不确定,艾莉亚、珊莎·史塔克和席恩·葛雷乔伊的命运也和瑟曦一样。

显然,第七季结尾小世界网络崩溃的影响(见第二集)以不同的方式改变了角色的网络位置,并因此将他们可能的命运带向不同的方向。事实上,通过提高聚集度和降低介数,这种网络转变降低了许多角色的生存机会——尽管对大多数人来说,还不足以推翻他们预测的命运……

最后一集的预测是,波隆和山姆威尔·塔利最有可能被杀死——山姆威尔有很高的信心。此外,如前所述,杰米·兰尼斯特和瓦里斯勋爵的命运很不确定。与此同时,瑟曦·兰尼斯特和史塔克姐妹最好仔细评估他们的网络位置——并战略性地改变它们,以便重新获得自信的预测。

即将推出:第 5 集——生存:网络生存策略

在下一集,我们将把注意力转向主角们为了决定他们自己和彼此的命运而可能采取的战略行动。

同时…

第 7.5 季新?查看第四季 预告片 及前几集:

第 1 集— 描绘大局

第 2 集— 冰与火的小世界

第 3 集— 人物网络地位和优势

对“应要求”这一集有什么想法?留下评论,我看看我能做些什么…

《权力的游戏》单词嵌入,R+L = J 吗?—第一部分

原文:https://towardsdatascience.com/game-of-thrones-word-embeddings-does-r-l-j-part-1-8ca70a8f1fad?source=collection_archive---------6-----------------------

我们能从 5 本《权力的游戏》书中的单词向量表示中学到什么吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

I know this is stupid, please read on 😃

剧透警告:这个故事包含了《权力的游戏》第七季的剧透

在我的第一篇关于文本生成的报道之后,我决定学习并撰写关于单词嵌入的文章。单词嵌入是 2013 年(现在是史前时代)的热门新事物。现在,让我们将这一数据科学突破应用于一些愚蠢的事情!

这是一个分为两部分的故事:
-第一部分:单词嵌入?什么?怎么做,为什么?
-第二部分:《权力的游戏》嵌入的乐趣
(代码在此处)

在这第一部分中,我们将从快速复习机器学习的字符和单词编码开始…如果你熟悉 NLP,你可以直接进入第 2 部分

字符编码

机器学习算法(以及一般的数学)处理数字。
在自然语言处理(NLP)中,我们必须用数字,更精确地说是向量(空间中的特定坐标)来表示字符和单词。

当在字符级工作时(比方说在小写字母上),我们必须编码 26 个字符。在这个场景中,“词汇表”是 26 个不同“标记”(“a”到“z”)的列表。因为 26 很小而且容易管理,一个简单的方法是给每个字符在空间中自己的维度。一个字符成为一个向量,在相应的字符坐标中为 1,在其他位置为零:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

lowercase alphabet one-hot encoding

从几何学的角度来看,在这个空间中,所有的角色彼此距离相等。我们让我们的算法知道一个“a”与一个“b”无关,更一般地说,所有的字符都是相同的。这种表示词汇表(以及一般的分类变量)的方式通常被称为**“一个热点编码”**(空间中只有一个坐标是“热点”)。

我们也可以用一维编码,例如用 a = (1), b = (2),一直到 z = (26)。但是在这个空间中,“z”将离“a”非常远,并且“z”是“a”的 26 倍,算法可能认为“z”只是类固醇上的“a ”,这是不正确的。它可以工作,但它不是一个非常明智的表示。

单词编码

回到我们的主要任务,在我们的例子中,我们想要对单词进行编码。《权力的游戏》包含了 12 000 个单词。这些单词中的每一个都必须给定一个空间矢量表示。如果我们“一次性编码”这个词汇,我们将得到 12 000 维空间中的向量。你可以看到它很快失去控制。因此,单词通常被编码在固定的低维子空间中。

另外,这一次,我们的令牌(单词)并不是 100%独立的,有些单词在语义上非常相似。例如,“愚蠢”和“哑巴”的意思差不多。通过一次性编码,我们会丢失这些信息。由于英语中的许多单词都有相似的语义,一种有趣的表示词汇的方法是为相似的单词创建相似的向量。

当单词在一个密集的向量空间中以一个任务表示时(比如保持语义相近的单词彼此靠近),这个过程(和产生的向量)通常被称为**“单词嵌入”**。

如何构建单词嵌入

有两种众所周知的算法来构建“通用”(多用途)嵌入,谷歌的 word2vec (2013)和斯坦福的 GloVe (2014)。

两种方法都通过两个词共现的程度来量化它们之间的相似性(学术术语是分布假设)。即使创建嵌入向量空间的过程不同,它们也产生相似的向量。以下是每个算法的简化步骤:

  • word2vec (skip-gram 模式)采用浅层前馈神经网络(1 个隐层)。对于输入的给定单词,网络被训练来预测词汇表中的每个单词与我们输入的单词一起出现的概率。为了更好地完成这项任务,网络只需要调整一个权重矩阵,这个矩阵来自一个密集的中间隐藏层。一旦经过训练,这个隐藏层就是我们单词的矢量表示。
  • GloVe 比较传统(不涉及神经网络),使用矩阵分解。它首先浏览文本,并计算单词对彼此靠近的次数(在给定的窗口中,比如 10 个单词)。这些信息存储在一个叫做“共现矩阵”的结构中。迭代地构建和调整单词向量,以最小化具有高共现概率的单词之间的(余弦)距离。

单词嵌入属性

2013 年,单词嵌入的一个特别之处让每个人都大吃一惊,那就是由此产生的向量空间有很多意想不到的性质。它不小心编码了几个高级语义概念。比如“他”和“她”这样的代词,它们之间的距离非常近(正如所料),但同时,从“他”到“她”(另一个向量)的路径具有惊人的性质。

通过将同样的“他到她”的转换应用到其他事物上,我们实际上是在交换性别。“男人”变成了“女人”,“演员”变成了“女演员”。为了说明这一点,这里是第二部分的一瞥。下面是从《权力的游戏》书籍中构建的单词向量的可视化(仅限):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Illustration of the “gender-swap” relationship (PCA projection of selected Game of Thrones word vectors)

在完全无监督的方式下,一个算法已经编码了“性别”的概念(没有命名),这怎么可能?

你可以把它想象成一个空间,在这里,文字因为不同的原因而相互吸引。让我们以这篇短文为例:

“奈德、凯特琳、布兰和珊莎来自史塔克家族。
劳勃、瑟曦、乔佛里和弥赛菈都来自拜拉席恩家族。凯特琳、珊莎、瑟曦和弥赛菈都是女人。
奈德、布兰、劳勃和乔佛里都是男人。”

通过这篇文章,我们希望来自同一个家庭的人能够相互吸引,同性之间也是如此。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

truncated word co-occurrence matrix

左边是一个截断的共现矩阵,只有一些特定的目标词(行)和上下文词(列)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2-D representation of our words

利用共现矩阵的直接 2-D 近似(PCA 因子分解),我们得到以下单词表示(这种操作显然不同,并且在 GloVe 中更复杂)。在这个二维空间中,有四种“力”在起作用。男人把其他男人拉向他们,与此同时,女人、史塔克和巴拉瑟翁也在这么做。

它达到了一种平衡,巴拉瑟翁在底层,史塔克在顶层,女人在左边,男人在右边,所有这些都没有任何指导。

嵌入捕捉了很多这样的语义关系(或者像一些人所说的“语言规则”)。它们可用于解决单词类比任务,例如:

“a”和“b”相似,就像“c”和“d”相似一样

缺少四个术语之一的示例:

“他”之于“她”,正如“男人”之于>

这被称为“类比推理”,这项任务是由 word2vec 的作者托马斯·米科洛夫等人引入的,他们建立了一个包含大量这些问题的完整的数据集

在向量算术中,类比“A 之于 B 如同 C 之于 D”翻译过来就是:
B-A~D-C
B
-A+C~D 她———“他”+“男人”~女人

我们的四句话单词空间已经可以解决一些问题,比如:

“劳勃”之于“巴拉瑟斯”就像“奈德”之于>
相当于……
“巴拉瑟斯”减去“劳勃”加上“奈德”是多少?

在我们的空间里,它给了我们一个或多或少“斯塔克斯”(tada!).

你可以看到,在我们的短文本例子中已经发生了很多事情,想象一下现在在 5 本书中,或者在维基百科中,也有更多的维度(数百个),让算法有一些空间来表达自己。

理想情况下,要“学习”英语,你必须使用大量的语料库。斯坦福的小组(以及谷歌)提供预训练的单词嵌入,其中语料库包含超过 100 亿个单词(通常来自维基百科)。在我们的例子中,我们只有 1000 万个单词,它们来自一本中世纪的奇幻书(所以请宽容)。

你现在已经准备好第二部分

奖金:这是无监督学习吗?

Word2vec 通常被认为是一种非常成功的“无监督学习”算法。人们可以理直气壮地说,因为神经网络是用输入/输出对来训练的,以使损失函数最小化,所以训练它们在某种程度上总是一项受监督的任务。

然而,在**“手动标记的”“自动标记的”**数据集之间肯定有区别。网络获得其预期输出(也称为标签/目标)的方式完全不同:

  • *“手动标记”*示例:网络被训练为将输入图像分类为包含“狗”或“猫”。为了训练这样的分类器,人们必须手动注释猫和狗的图像来建立数据集。
  • *“自动标注”*示例:在 word2vec 中,有一种巧妙的自主方式来为任何文本生成标签。因此,您可以使用任何想要的数据集,并且不需要人工干预(有些人称之为“自我监督”)。对于时间序列预测或自动编码器来说,情况相对类似。

第一部分到此结束。如果你喜欢,可以关注我的 推特 获取最新消息。此外,如果你发现有什么问题或者有任何疑问,请在评论区提问。

《权力的游戏》单词嵌入,R+L = J 吗?—第二部分

原文:https://towardsdatascience.com/game-of-thrones-word-embeddings-does-r-l-j-part-2-30290b1c0b4b?source=collection_archive---------8-----------------------

我们能从 5 本《权力的游戏》书中的单词向量表示中学到什么吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,事情变得严重了。让我们建立我们的向量,并质疑这个空间…

提醒一下,这是一个分为两部分的故事:
第一部分:单词嵌入?什么?怎么做,为什么?
第二部分:权力的游戏嵌入的乐趣

构建嵌入王座的游戏

注意:我尝试的一切都可以在这个库中找到以及训练过的向量。跳进去尝试新事物真的很容易(只是笔记本里的一些熊猫、numpy、matplotlib)。如果你发现一些很酷的东西,请告诉我!

一切都将基于《权力的游戏》前 5 本书的 100 维手套单词向量表示。这个主体非常小,只需要一个小时就可以稳定下来。我们现在有 12000 个单词由 100 维密集向量表示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

our 100-D GoT vectors in a dataframe

快速评估我们的矢量

GloVe 的构建使得相似单词的向量在空间中获得相似的方向(它试图最大化它们的点积)。测量方向相似性的一种方法是通过余弦相似性(向量之间的角度)。如果向量具有相同的幅度,则点积和余弦相似度是等价的。因此,要使所有东西都成为点积,第一步是标准化单词向量。

我们现在可以找到与一个已知单词相似的单词,或者我们可能产生的任何向量,就像回答类比问题的那些向量一样。为了检查在这个不寻常的数据集上创建单词嵌入是否完全无用,让我们看看我们的向量在我们之前提到的 Google word analogy 数据集上的表现(第 1 部分)。是一套 19000+字的类比。结果如下:

questions: 4688 filtered out of 19558 (missing words)
accuracy = 9.94% (466/4688)
second-guess accuracy = 14.04% (658/4688)

许多类比是不可检验的,因为有些词不在词汇表中(书中没有提到巴黎或柏林,想想吧)。在其他方面,我们的向量达到了近 10%的精度。这显然很糟糕,但也表明这个向量空间并不是无用的。下面是一些“已解决”的类比:

'man' is to 'woman' as 'husband' is to 'wife'
'boy' is to 'girl' as 'uncle' is to 'aunt'
'falling' is to 'fell' as 'going' is to 'went'

一般注意:我会挑选很多。下面的例子(已经不是特别好了)是我在探索单词 vectors 时发现的最好的例子。

可视化《权力的游戏》单词向量

让我们从一些非常直观的东西开始。我们可以选择一些单词,并将相应的 100 维向量投影到一个更友好的 2 维空间进行绘图。让我们在节目的主要角色上做它。

注意:我不认为全名是单词,从算法的角度来看,琼恩·雪诺是一个 2 字序列(“乔恩”和“雪”)。改变这种行为的一个方法是在我们的文本中用“Jon_Snow”代替“琼恩·雪诺”。在上面的图中,姓氏是手动添加的。所以琼恩·雪诺的矢量可能因为琼恩·艾林而在空间漂移了…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2-D T-SNE projection of the main characters (colored by House)

向量显然不是随机的。我们可以看到同一家族的人物聚集在一起。我们也看到情侣们亲密无间,英雄在上面(是的《GoT》里有英雄)。

我们也可以想象应该成对的单词的二维投影(就像我们在第一部分中所做的)。下面是一个 GoT 房子和它的座位(通常是主城堡)之间关系的图示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Game of Thrones house-to-seat regularities

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

extract from my notebook

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Bonus: Adjective — Comparative — Superlative regularities

我们还可以尝试另一种很酷的单词向量的二维可视化。我只在 word2viz 项目中见过,不知道它有没有名字。姑且称之为“word2viz”情节。它是这样工作的:

  1. 你创造了两个有趣的单词向量差异,比如从“女人到男人”的路径和从“邪恶到善良”的路径
  2. 你选择一些词(让我们以《GoT》的主要人物为例)
  3. 对于每个单词,计算单词和这两个特殊向量之间的点积
  4. 您从每个单词中获得的两个值成为二维图中的两个坐标

数学上,对于给定的字向量w:
w。( - ) = w - 女人
~与“男人”相似——与“女人”相似

这个标量值直观上就是“如何把一个词放在女人对男人的一个尺度上”。这给了我们 X 坐标。如果我们使用 Y 的第二个“概念”,我们将有一个自定义的二维空间,其中单词沿着两个差异轴展开。

这给了我们:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The evil-good axis is not working very well (Cersei and Joffrey #?!)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Westeros places through a 2-D projection on (east-west) and (north-south)

再比如……

我从《权力的游戏》中选取了一些重要的地方,并把相应的向量投射到一个南北向和一个东西向的“文字向量尺度”上。

令人惊讶的是,结果并非完全不一致。

图片来源于 reddit 用户 Selvag(完整地图在此处

找到乔恩的父母

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Last known sighting of Jon Snow

剧透回顾:

几年来,雷加·坦格利安(丹妮莉丝的哥哥)和莱安娜·史塔克(奈德的妹妹)可能是琼恩·雪诺的父母,这一直是讨论这一事实的非剧透方式。这个理论在电视剧第六季和第七季中得到了证实。我们现在甚至知道他的真名了!他是伊耿·坦格利安,铁王座的合法继承人,也是他自己孩子未来的第一代表亲!#神魂颠倒

很明显,实际的 R+L=J 向量方程不成立。首先,因为这不是向单词嵌入提问的好方法。它没有利用任何“规律性”。

我们可以选择一个更聪明的方式来提问,比如通过“父亲对儿子”的规律,试着从雷加到琼恩,比如使用从奈德到罗柏的路径。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

more clever ways to find family relations

但是,即使这样,它也不会起作用,因为基础材料(当谈论父母身份时,将乔恩放在他父亲附近的单词序列)在书中没有。如果数百万读者找不到它,一个演绎能力较弱的算法也不会做得更好。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它工作的唯一方式是,如果 George R. R. Martin 已经建立了它的 5 本书(和相应的共现矩阵),知道有人会在 100d 训练的手套嵌入上问这个愚蠢的问题。我试过了,我可以确定他没有。

第二部分到此结束。如果你喜欢,可以关注我的 推特 获取最新消息。此外,如果你看到一些错误,或者如果你有任何问题,请随时在下面发表评论。

参考书目和推荐读物

博弈

原文:https://towardsdatascience.com/game-playing-1fc093da36d1?source=collection_archive---------7-----------------------

更多内容请关注http://developercoding.comhttp://developercoding.com/AI/

让电脑和你一起玩吧。让我们玩玩人工智能吧。

人工智能中的极大极小算法

在玩游戏时,首先,让我们看看极大极小算法,它将帮助我们找到赢得游戏的最佳移动。在下一课中,我们将看看井字游戏,我们将使用极大极小算法来制作一个无与伦比的井字游戏。

考虑双人游戏,如井字游戏、国际象棋、跳棋等。现在,我们的目标或目的是预测一个将带领我们走向胜利的步骤。如果我们在玩游戏,那么很明显我们想尽可能地增加我们的得分和减少对手的得分,我们将应用这一原则或逻辑并预测移动。另一方面,当对手在比赛时,他会减少我们的得分,增加他的得分。所以这种类型的游戏,我们会在我们的代码中进行模拟,产生所有看似合理的移动,并从中选择一个将我们带到胜利状态的移动。好的,让我们用一个人类的思维过程来思考和比较。当人类玩耍时,他会像

  1. 好,这是我的状态或情况
  2. 如果我走这步棋,那么对手就可以走那一套棋,如果他走那一步棋,那么我可以依次走这步棋,我就能赢。
  3. 人类重复步骤 2,直到他可以找到一个有助于获胜的步骤

基本上,这种思维过程我们想用电脑来刺激。
寻找最优移动的极大极小搜索过程是深度优先和深度受限的搜索过程。minimax 背后的想法是,我们将从当前位置开始,并使用合理移动生成器来生成一组可能的后续位置。

极大极小示例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们用一个例子来了解一下
假设
一个赢的状态=+10
一个输的状态是-10
平局是 0

左边的棋会被选中,其余的会被丢弃。

具有一般树的极大极小算法的例子:-

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

博弈论——极大极小

原文:https://towardsdatascience.com/game-theory-minimax-f84ee6e4ae6e?source=collection_archive---------2-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这篇文章与之前的文章有些不同,之前的文章是基于一些在你的项目中使用的新技术。

有意思?我将从博弈论的角度来描述极大极小算法。只是让你知道你会期待什么:

1.那么什么是极大极小算法呢?
2。计划和代码
3。算法描述
4。优化
4.1。深度优化
4.2。阿尔法-贝塔优化
5。建议
6。结论

对于编码,我们将使用 Objective-C 语言。不过不要担心,会有比代码更多的理论。

方向定了,走吧。

那么什么是极大极小算法呢?minimax——是决策理论、博弈论、统计学和哲学中使用的决策规则,用于最小化最坏情况下(最大损失)的可能损失。最初是为两人零和博弈理论而制定的,涵盖了两人交替行动和同时行动的情况,它也被扩展到更复杂的游戏和存在不确定性时的一般决策。

咕咕咕!
现在我们有了定义,里面嵌入了什么逻辑?让我们假设你正在和你的朋友玩一个游戏。然后你走的每一步,你想最大化你的胜利,你的朋友也想最小化他的损失。最终,对你们两个来说都是一样的定义。你的下一个决定应该是最大化你当前的盈利位置,知道你的朋友在下一步将最小化他的亏损位置,并且知道下一步你也将最大化你的盈利位置…

闻到这种递归的味道了吗?所以这个算法的主要思想是在知道你的对手也会这么做的情况下做出最好的决定。

计划和代码

我们将使用树表示来构建这个算法。每一代新的孩子都有可能成为另一个玩家的下一步。例如,第一代是你的可能步骤,每一步都会导致对手的可能步骤的一些列表。在这种情况下,您的步骤是“父顶点”,而您的对手可能的下一步是它的“子顶点”。
这里是经过所有优化的最终算法代码。

#pragma mark - Public- (NSUInteger)startAlgorithmWithAITurn:(BOOL)aiTurn; { return [self alphabetaAlgorithm:_searchingDeapth    alpha:NSIntegerMin beta:NSIntegerMax maximizing:aiTurn];}#pragma mark - Private- (NSInteger)alphabetaAlgorithm:(NSInteger)depth alpha:(NSInteger)alpha beta:(NSInteger)beta maximizing:(BOOL)maximizing { self.currentCheckingDepth = _searchingDeapth - depth; if (self.datasource == nil || self.delegate == nil) { return 0; } if (depth == 0 || [self.datasource checkStopConditionForAlgorithm:self onAITurn:maximizing]) { return [self.datasource evaluateForAlgorithm:self  onAITurn:maximizing]; } NSArray *nextStates = [self.datasource  possibleNextStatesForAlgorithm:self onAITurn:maximizing]; for (id state in nextStates) { [self.delegate performActionForAlgorithm:self andState:state onAITurn:maximizing]; if (maximizing) { alpha = MAX(alpha, [self alphabetaAlgorithm:depth - 1 alpha:alpha beta:beta maximizing:NO]); } else { beta = MIN(beta, [self alphabetaAlgorithm:depth - 1  alpha:alpha beta:beta maximizing:YES]); } [self.delegate undoActionForAlgorithm:self andState:state onAITurn:maximizing]; if (beta <= alpha) { break; } } return (maximizing ? alpha : beta);}

算法描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example

让我们对优化视而不见,从我们需要的初始东西开始。首先,我们需要一个算法,它将基于一个已完成的步骤返回可能的后续步骤列表。我们用它来产生其他的子顶点,如前所述。

其次,我们需要一个算法,将在游戏结束时计算游戏结果的评估。使用该算法,每个顶点(生成的步骤)都将具有赋值的结果。如何分配将在后面描述。

那么这是如何使用树和这些算法的呢?逻辑上算法分为两部分:
1。轮到我们了
2。对手转身

在作为下一个顶点的“轮到我们”上,我们选择一个具有最佳评估值的孩子。然后,由于下一个选择的步骤产生可能的对手步骤及其评估,他将选择最差的评估值(对我们最差意味着对他最好)。

这仅仅意味着我们将从可能的对手步骤中采取最大的评估步骤,而对手将从我们可能的下一步中采取最小的评估步骤。

下一个问题是——我们什么时候评估 step?当它被创造出来的时候,首先想到的是什么。但是等一下,如果它依赖于下一代,或者换句话说依赖于另一个玩家的脚步,我们怎么能马上计算出来呢?意味着我们的步长值将从下一代步长值开始最大化,这是一个对手步长。从另一个角度来看,对手的步长值将是下一代步长值的最小值,这是我的。遵循这个规则,我们可以说评估将在游戏结束时进行,因为它是最终生成的步骤。之后,它将向后展开,用前面描述的计算值标记所有顶点,直到它到达根。

递归生成结束,如果:
我们得到一个赢家
不可能有下一步棋,我们得到一个平局

游戏状态的评估可以用下一种方式计算:
如果我们赢了,那么评估值应该大于某个正值
如果我们输了,那么它应该小于某个负值
如果我们打平了,那么它应该在这个值之间
这意味着我们的位置越好,它的值应该越大。

这个评价可能取决于不同的东西。举个例子,为了评估,我们给它一个我们是赢家的情境。
然后它可以根据下一个值进行评估:
1。我走了多少步才获得胜利
2。你的对手离胜利有多近
等等…

这个函数是算法中最重要的部分之一。组织得越好,你得到的结果就越好。仅依赖于一个特征的函数不会像依赖于十个特征的函数那样精确。此外,您选择用于评估的特征应该具有逻辑意义。如果你认为评估值更大是因为玩家是女性而不是男性,这对性别歧视者有一定意义,但对算法没有意义。结果,你会收到错误的结果。一切都是因为你是个性别歧视者。

太好了!,现在我们大体上理解了算法和它下面的思想。这听起来很酷,但在执行时间方面却没有那么好。为什么?

优化

例如,对于用法,让我们选择“四连胜”游戏。如果你不知道它是什么,这里有一个简短的描述:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“游戏的目标是将你的四个代币连成一条线。所有方向(垂直、水平、对角线)都是允许的。玩家轮流将他们的一个代币放入七个槽中的一个。令牌在槽内尽可能远地下落。拿红色代币的玩家开始。当第一个玩家连上四颗石头时,游戏立即结束。”

让我们想想在这种情况下我们的算法将如何工作。该字段有 7*6=42 个步骤。开始时,每个用户可以做 7 个不同的步骤。这个数据给了我们什么?这些价值观是有史以来最糟糕的。为了让他们更真实,让我们说,例如,游戏将在 30 步结束,平均用户将有可能选择 5 行。使用我们的算法,我们将得到下一个近似数据。第一个用户可以产生 5 个步骤;每个步骤将产生 5 个自己的步骤。现在我们有 5 + 25。这 25 步,每一步可以产生 5 个新的步骤,等于 125 步。这意味着在计算的第三步,我们将有大约 155 步。每下一步都会产生越来越多的可能步骤。您可以使用下一个函数来计算它们:
5 + 5 + 5 + … + 5 ⁰.这个值是巨大的,计算机计算这么多步要花很多时间。

值得庆幸的是,有现成的优化极大极小算法,这将降低这个值。我们很快就会谈到他们两个。

深度优化

很久很久以前,一个非常聪明的人说“为什么我们要一直数到最后?我们能不能在中间的某个地方做个决定?”。是的,我们可以。当然最后精度会比中间某处好很多,但是有了好的算法进行评估,就可以把这个问题降下来。那么接下来我们该怎么办,只不过是多加一条“算法停止”的规则。这个规则是,如果当前步长深度达到临界值,则停止。这个值你可以在测试后自己选择。我想通过一系列的测试,你会发现那些符合你特殊情况的测试。当我们根据这条规则开始评估时,我们把它当作平局。

这条规则并不困难,而且可以真正优化我们的算法。然而,它仍然降低了我们的精度,为了使它工作,我们不能使用超低深度,否则它会给我们错误的,不准确的值。接下来我会告诉你,我们选择了深度 8。尽管花了很长时间才得到最终结果。下一步优化对精度没有影响,并减少算法时间真的很好。它的名字叫阿尔法贝塔,它让我神魂颠倒。

阿尔法-贝塔优化

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example

它的意思很简单。接下来的想法是——如果我们知道已经建立的分支会有更好的结果,就不需要计算下一个分支。这只是浪费资源。想法很简单,实现呢?

为了计数,我们需要将另外两个变量传递给递归算法。
1。α—表示最大化零件
2 的评估值。β——表示最小化部分的评估值

从前面的部分中,我们了解到我们必须走到树的末端,只有这样我们才能评估我们的结果。所以如果我们总是选择左顶点,那么第一次求值将在最后一个顶点上进行。在此之后,评估过程将从它的直接顶点开始,并且将对所有左边的顶点继续,直到一个可能的顶点结束,等等。

我为什么要告诉你这些?这都是因为理解如何评估顶点是至关重要的优化。

为了让我们更容易想象,让我们假设我们正处于最大化的转折点。对我们来说,这意味着我们在计算阿尔法值。该值被计为其后代的所有评估值的最大值。在我们计算阿尔法值的同时(我们在最大化过程中),我们有一个贝塔值。在这里,它表示其父代的当前 Beta 值。太好了!,现在我们知道了α和β在特定时间的含义。为避免误解,α是我们当前的评估值,β是当前的进一步评估值。

最后是优化检查。如果β低于或等于α,我们将停止对所有下一个子代的评估。

最后是优化检查。如果β低于或等于α,我们将停止对所有后代的评估。

为什么有效?因为β已经小于α——它的后代的值,同时α被计为可能的后代值的最大值。这意味着现在我们步骤的评估值不能低于当前值。从另一个角度来看,我们现在拥有的 Beta 是我们父代的当前评估值。从目前我们正在最大化的观点来看,我们可以理解我们的父代正在最小化,这意味着它将选择其当前值和其子代计算值的最小值。

将所有这些放在一起——因为我们知道我们的计算值高于父值,所以我们做出决定,它不会选择我们作为它的下一个可能步骤(它有更好的后代,如果选择它们,它的值会更低)。从这个角度来看,做下一个计算是荒谬的,因为它们不会改变最终结果。所以我们,作为父-子,我们停止所有的计算并返回当前值。利用这一点,我们的父母将比较我们和当前的最佳选择。通过前面描述的逻辑,它将选择其当前值。

使用这种优化,我们可以削减巨大的分支,并节省大量的工作,不会对最终结果产生任何影响。

建议

太好了!,现在我们知道了两种优化方法,可以让我们的算法运行得更快,我想给你一个建议。通常,当机器做出选择时,真正的用户需要一些时间来决定下一步做什么。我们可以利用这段时间为下一步的决定做准备。

因此,当我们做出选择时,让我们继续为所有可能的用户选择而努力。这给了我们什么?
1。它们中的许多已经从以前的用户迭代中计算出来了。
2。当用户选择他的选择时,我们将继续我们的计算。这将增加我们的树的深度,换句话说,准确性。

最后,当用户做出选择时,我们可以简单地切断所有其他未被选择的分支,只继续选择一个分支。
这很好,但接下来让我们对我的假设做出一个总体结论——不要每次轮到你的时候都开始你的算法。让它在游戏中运行一次,当用户选择某个步骤时,获取它的计算数据,并继续我们的计算,直到结束。

有人会说,它有严重的记忆问题。是的,但这只是一个建议,你可以结合两种解决方案,找到最适合你的时间,内存和你的具体情况的准确性。

此外,我建议在一个新线程中对每个可能的步骤进行计算,但这是一个完全不同的故事。

结论

您应该在哪里使用这些信息?在任何地方,你都必须根据用户的行为做出决定。最常见的可能是游戏,但是然后,你可以用你的幻想把它整合到一个地方,在那里你必须反思任何执行的动作。你唯一需要理解的是两个互相“博弈”的部分的算法。

结束了!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://nerdzlab.com

博彩业:好的、坏的和丑陋的

原文:https://towardsdatascience.com/gaming-industry-the-good-the-bad-and-the-ugly-47c8e1244e24?source=collection_archive---------3-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Credit image: Pixaby.

我目前在奥地利一家名为 BongFish 的游戏公司工作,为一个 AAA 级未公开的标题管理数据。虽然我被聘为数据标签员,但我也与其他部门接触,因此我也在公司执行其他活动。

我决定写今天的游戏行业,因为它围绕着许多人的梦想,他们渴望最终从事对他们有意义的事情。很少有其他行业像游戏行业一样引起如此大的兴趣。

的确,我热爱我的工作,游戏公司有一些很酷的东西,让工作变得更加愉快。然而,我必须诚实地向你展示同一个故事的两面。但是不要害怕,这篇文章并不意味着以任何方式阻止你申请游戏工作室。我在这里的意图实际上是给你一些见解,一旦到了那里,你可以期待什么。

让我们从头开始。游戏行业的收入每年都在增长,2017 年全球收入预计将达到 1089 亿美元。很自然,新的工作室正在快速涌现(查看 Gamedevmap.com 网站,获得世界各地游戏工作室的完整列表),并承诺在接下来的几年里保持利润丰厚。因此,游戏行业对高技能员工的需求正在增加。

机会不仅对开发人员来说是充足的,对艺术家、营销人员、人力资源专家和项目经理也是如此。然而,工作室通常选择雇佣有经验的员工,因为团队内部培训人员需要花费大量精力,尤其是在制作阶段的中期。

随着数字发行的兴起,许多独立公司正在冲浪,并将他们的游戏上传到 Steam 等平台上。因此,公司可以通过广告和游戏内购买赚钱,用户可以以可承受的价格从大量游戏中受益。在过去,游戏都是盒装的,与主机分开销售,尽管对主机的炒作仍然是一件大事,但它们不再是玩的唯一出路。

如今,无论你的口袋有多大,成为一名游戏玩家都是可能的。此外,游戏工作室正在将其活动扩展到移动和社交游戏,让人们可以通过移动和平板设备玩游戏。

游戏产业从未如此有利可图,专家称游戏的繁荣将持续更长时间。所以让我们深入游戏工作室,看看为一个游戏工作室工作是什么样子的。

关于游戏工作室

每当我听人们谈论游戏公司时,我总有这样一种印象,人们正在忘记有一种东西将地球上的每一个企业团结在一起,那就是利润。把一个游戏工作室想象成一个开发产品来赚钱的公司。为了保持现金流,工作室需要创造一个成功的游戏,能够产生足够高的收入来支付生产成本(开发人员,艺术家,测试人员和许多其他运营费用)。

但是我们不应该浪漫化,人们不是被雇来在工作时间玩游戏的,也不总是他们会产生他们下一个最喜欢的游戏。我明白,当我们帮助开发一个我们喜欢自己玩的游戏时,这很棒,但实际上,我们将在一个不完全是我们最喜欢的游戏中工作,或者如果我们不开发它,我们可能不会玩它。

开发游戏和其他任何行业一样,因此工作室会开发对他们有利可图的东西。

就我而言,我不得不说,我目前从事的这个项目有点幸运,但事实上,我并没有把它作为我工作满意度的一个条件。如果你正在考虑一个游戏公司的职位,但你只做你目前玩的游戏,你可能会限制自己永远不会真正深入游戏行业,因为你把自己限制在几个职位上。

主要有四种不同类型的游戏工作室:发行商、游戏开发工作室、独立公司和移动游戏公司。

出版商是大玩家,他们生产最昂贵的图书,他们在市场营销上投入大量资金,以保证他们(非常高的)投资回报率。出版商通常支付最高的薪水,并以拥有令人惊叹的基础设施而闻名。然而,发行商决定不在内部制作游戏是很常见的。一般来说,他们外包游戏开发公司,让他们的游戏部分或全部在外部制作,这种做法被称为外部开发。

反过来,独立工作室以数字方式制作和发布他们的游戏,他们是相当小的公司,通常是独立的开发者。与出版商相比,独立工作室的预算有限,并且负责制作、发行和在线营销他们自己的游戏。独立工作室的好处在于,他们通常比出版商更乐于接受新想法。

另一类上,有手游公司。他们制作可以在移动设备上玩的游戏,这些游戏可以在 Play Store、App Store 和移动版社交媒体网站上轻松找到。

快速提醒一下,还有赌博游戏公司、教育游戏公司、制作供精神疾病患者玩的游戏的公司……不胜枚举。

在游戏工作室工作

娱乐业是你此生能找到的最令人兴奋的职业。你能想象自己为一件通常以娱乐为目的的事情工作吗?这就是游戏玩家在游戏工作室工作时对自己的想象。事实上,我不能责怪他们,让你的名字出现在一场比赛的片尾字幕中是一次难忘的经历。更不用说有机会玩一个你自己为其发展做出贡献的游戏了,太棒了!

然而,关键时刻和高裁员率可能是真实的。它们的出现是因为游戏开发是由发布组成的,在制作过程中,可以雇佣更多的员工来处理紧急需求和紧迫的截止日期。一旦制作结束,游戏最终发布,公司必须削减成本,直到下一个制作开始,所以裁员发生。

如果你想在游戏公司工作,请做好准备,游戏行业的挑战很大,由于市场需求越来越大,艺术家必须不断超越质量。开发人员会遇到多种技术障碍,包括新工具的实现。变化每周都在发生,候选人应该通过无组织的方式学习。如果你是那种不适应修改的人,那么你可能会发现在游戏行业很难生存。

为了保险起见,总是要问你的面试官你是否被某个特定的项目雇佣,如果是的话,项目什么时候结束,项目结束后公司对你有什么计划。

游戏工作室的招聘流程

游戏行业的招聘过程很艰难,这并不奇怪。这并不是说你在准备其他工作面试时不会有不好的时候,但是游戏工作室知道将要面临的挑战。合适的员工应该不仅仅是一个游戏爱好者,而是一个拥有额外精力的高技能专业人士,最重要的是一个团队成员。

事实上,许多工作室已经意识到,伟大的游戏玩家不一定会成为伟大的员工,所以记住最近发布的游戏不足以在面试中获得职位。另一方面,如果你真的不喜欢游戏,你可能很难向面试官解释为什么你认为你是合适的候选人。

除了消极的一面之外,游戏行业还有一些不可否认的东西,游戏工作室往往拥有友好、热情和积极的员工,这些人对自己的工作充满热情,每天都带着灿烂的笑容工作。除此之外,游戏工作室的工作环境具有典型的休闲感觉良好的环境,这将使你想起童年时代舒适多彩的卧室。更不用说许多同事带到办公室来庆祝每一次冲刺结束的美味了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

At the office

如果游戏行业适合你或不适合你,我认为只有你有能力回答这个问题,但如果我从所有这些中得到一个信息,我会说游戏行业,像任何其他行业一样,肯定有其好的,坏的和丑陋的一面,询问人们,获得信息,分析利弊,继续前进。

你有什么经验可以分享吗?在下面给我们写评论吧!

我没有回答你的疑问?请在下面留下您的问题!

在 Tensorflow 后端使用 Keras 的 GAN 示例

原文:https://towardsdatascience.com/gan-by-example-using-keras-on-tensorflow-backend-1a6d515a60d0?source=collection_archive---------0-----------------------

生成对抗网络(GAN)是深度学习领域最有前途的新发展之一。 GAN 由 Ian Goodfellow 于 2014 年提出,通过训练两个相互竞争和合作的深度网络(称为生成器和鉴别器)来解决无监督学习的问题。在训练过程中,两个网络最终都学会了如何执行它们的任务。

甘几乎总是被解释为伪造者(生殖)和警察(鉴别者)。最初,伪造者会向警察出示假币。警察说是假的。警察向造假者反馈为什么钱是假的。伪造者试图根据收到的反馈制造新的假币。警方表示,这些钱仍然是假的,并提供了一套新的反馈。伪造者试图根据最新的反馈制造新的假币。这种循环无限期地继续下去,直到警察被假钱所愚弄,因为它看起来像真的。

尽管 GAN 的想法在理论上很简单,但要建立一个可行的模型却非常困难。在 GAN 中,有两个耦合在一起的深层网络,使得梯度的反向传播具有两倍的挑战性。深度卷积 GAN (DCGAN) 是演示如何构建实用 GAN 的模型之一,它能够自学如何合成新图像。

在本文中,我们将讨论如何在 Tensorflow 1.0 后端上使用 Keras 2.0 用不到 200 行代码构建一个有效的 DCGAN。我们将训练一只 DCGAN 学习如何书写手写数字,用 MNIST 的方式。

鉴别器

辨别图像真实程度的鉴别器基本上是一个深度卷积神经网络(CNN ),如图 1 所示。对于 MNIST 数据集,输入是图像(28 像素 x 28 像素 x 1 通道)。sigmoid 输出是图像真实程度概率的标量值(0.0 肯定是假的,1.0 肯定是真实的,介于两者之间的任何值都是灰色区域)。与典型的 CNN 的区别在于层间没有最大池。相反,步长卷积用于下采样。在每个 CNN 层中使用的激活函数是一个泄漏 ReLU。层间 0.4 和 0.7 之间的压差防止过拟合和记忆。清单 1 展示了 Keras 中的实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 1. Discriminator of DCGAN tells how real an input image of a digit is. MNIST Dataset is used as ground truth for real images. Strided convolution instead of max-pooling down samples the image.

self.D = Sequential()depth = 64dropout = 0.4# In: 28 x 28 x 1, depth = 1# Out: 14 x 14 x 1, depth=64input_shape = (self.img_rows, self.img_cols, self.channel)self.D.add(Conv2D(depth*1, 5, strides=2, input_shape=input_shape,\padding='same', activation=LeakyReLU(alpha=0.2)))self.D.add(Dropout(dropout))self.D.add(Conv2D(depth*2, 5, strides=2, padding='same',\activation=LeakyReLU(alpha=0.2)))self.D.add(Dropout(dropout))self.D.add(Conv2D(depth*4, 5, strides=2, padding='same',\activation=LeakyReLU(alpha=0.2)))self.D.add(Dropout(dropout))self.D.add(Conv2D(depth*8, 5, strides=1, padding='same',\activation=LeakyReLU(alpha=0.2)))self.D.add(Dropout(dropout))# Out: 1-dim probabilityself.D.add(Flatten())self.D.add(Dense(1))self.D.add(Activation('sigmoid'))self.D.summary()

清单 1。图 1 中鉴别器的 Keras 代码。

发电机

生成器合成假图像。在图 2 中,假图像是使用卷积的逆运算(称为转置卷积)从 100 维噪声(均匀分布在-1.0 到 1.0 之间)生成的。使用前三层之间的上采样,而不是 DCGAN 中建议的分数步长卷积,因为它合成了更真实的手写图像。在各层之间,批量标准化稳定了学习。每一层之后的激活函数是一个 ReLU。最后一层的 sigmoid 的输出产生假图像。第一层 0.3 至 0.5 之间的压差可防止过度拟合。清单 2 展示了 Keras 中的实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 2. Generator model synthesizes fake MNIST images from noise. Upsampling is used instead of fractionally-strided transposed convolution.

self.G = Sequential()dropout = 0.4depth = 64+64+64+64dim = 7# In: 100# Out: dim x dim x depthself.G.add(Dense(dim*dim*depth, input_dim=100))self.G.add(BatchNormalization(momentum=0.9))self.G.add(Activation('relu'))self.G.add(Reshape((dim, dim, depth)))self.G.add(Dropout(dropout))# In: dim x dim x depth# Out: 2*dim x 2*dim x depth/2self.G.add(UpSampling2D())self.G.add(Conv2DTranspose(int(depth/2), 5, padding='same'))self.G.add(BatchNormalization(momentum=0.9))self.G.add(Activation('relu'))self.G.add(UpSampling2D())self.G.add(Conv2DTranspose(int(depth/4), 5, padding='same'))self.G.add(BatchNormalization(momentum=0.9))self.G.add(Activation('relu'))self.G.add(Conv2DTranspose(int(depth/8), 5, padding='same'))self.G.add(BatchNormalization(momentum=0.9))self.G.add(Activation('relu'))# Out: 28 x 28 x 1 grayscale image [0.0,1.0] per pixself.G.add(Conv2DTranspose(1, 5, padding='same'))self.G.add(Activation('sigmoid'))self.G.summary()return self.G

清单 2。图 2 中生成器的 Keras 代码。

GAN 模型

到目前为止,还没有模型。是时候为训练建立模型了。我们需要两个模型:1)鉴别器模型(警察)和 2)对抗模型或生成器-鉴别器(伪造者向警察学习)。

鉴别器模型

清单 3 展示了鉴别器模型的 Keras 代码。它是上面描述的鉴别器,具有为训练定义的损失函数。由于鉴频器的输出是 sigmoid,我们使用二进制交叉熵来计算损耗。在这种情况下,RMSProp 作为优化器生成了比 Adam 更真实的假图像。学习率 0.0008。权重衰减和剪辑值在训练的后半部分稳定学习。你要调整学习率就要调整衰减。

optimizer = RMSprop(lr=0.0008, clipvalue=1.0, decay=6e-8)self.DM = Sequential()self.DM.add(self.discriminator())self.DM.compile(loss='binary_crossentropy', optimizer=optimizer,\metrics=['accuracy'])

清单 3。鉴别器模型在 Keras 中实现。

对抗模式

对抗模型只是如图 3 所示的生成器-鉴别器堆叠在一起。生成器部分试图欺骗鉴别器,同时从它的反馈中学习。清单 4 展示了使用 Keras 代码的实现。训练参数与鉴别器模型中的相同,除了降低的学习速率和相应的权重衰减。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 3. The Adversarial model is simply generator with its output connected to the input of the discriminator. Also shown is the training process wherein the Generator labels its fake image output with 1.0 trying to fool the Discriminator.

optimizer = RMSprop(lr=0.0004, clipvalue=1.0, decay=3e-8)self.AM = Sequential()self.AM.add(self.generator())self.AM.add(self.discriminator())self.AM.compile(loss='binary_crossentropy', optimizer=optimizer,\metrics=['accuracy'])

清单 4。在 Keras 中实现的对抗模型如图 3 所示。

训练

训练是最难的部分。我们首先通过用真实和虚假图像单独训练鉴别器模型来确定鉴别器模型是否正确。然后,依次训练鉴别模型和对抗模型。图 4 显示了鉴别模型,而图 3 显示了训练期间的对抗模型。清单 5 展示了 Keras 中的训练代码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 4. Discriminator model is trained to distinguish real from fake handwritten images.

images_train = self.x_train[np.random.randint(0,self.x_train.shape[0], size=batch_size), :, :, :]noise = np.random.uniform(-1.0, 1.0, size=[batch_size, 100])images_fake = self.generator.predict(noise)x = np.concatenate((images_train, images_fake))y = np.ones([2*batch_size, 1])y[batch_size:, :] = 0d_loss = self.discriminator.train_on_batch(x, y)y = np.ones([batch_size, 1])noise = np.random.uniform(-1.0, 1.0, size=[batch_size, 100])a_loss = self.adversarial.train_on_batch(noise, y)

清单 5。鉴别模型和对抗模型的序贯训练。超过 1000 步的训练会产生可观的输出。

训练 GAN 模型由于其深度需要很大的耐心。以下是一些提示:

  1. 问题:生成的图像看起来像噪音。解决方案:在鉴频器和发生器上使用压差。低压差值(0.3 到 0.6)生成更真实的图像。
  2. 问题:鉴别器损耗迅速收敛到零,从而阻止发电机学习。解决方案:不要预先训练鉴别器。而是使其学习率大于对抗模型的学习率。对生成器使用不同的训练噪声样本。
  3. 问题:发生器图像看起来仍然像噪声。解决方案:检查激活、批处理规范化和删除是否按正确的顺序应用。
  4. 问题:计算出正确的训练/模型参数。解决方案:从发表的论文和代码中的一些已知工作值开始,一次调整一个参数。在训练 2000 步或以上之前,观察 500 步或 1000 步左右参数值调整的效果。

样本输出

图 5 显示了训练期间输出图像的演变。观察图 5 很有趣。GAN 正在学习如何自己书写手写数字!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 5. DCGAN output images during 10,000 steps of training.

Keras 的完整代码可以在这里找到。

GAN —简介和实现—第 1 部分:在 TF 中实现一个简单的 GAN,用于 MNIST 手写数字生成

原文:https://towardsdatascience.com/gan-introduction-and-implementation-part1-implement-a-simple-gan-in-tf-for-mnist-handwritten-de00a759ae5c?source=collection_archive---------2-----------------------

GANs 背后的想法是,你有两个网络,一个生成器 GG 和一个鉴别器 DD,彼此竞争。生成器生成假数据传递给鉴别器。鉴别器也能看到真实数据,并预测它收到的数据是真是假。生成器被训练来欺骗鉴别器,它想要输出看起来尽可能接近真实数据的数据。鉴别器被训练来辨别哪些数据是真的,哪些是假的。最终发生的情况是,生成器学习生成与鉴别器的真实数据无法区分的数据。

这是平衡状态,期望值是鉴别器发出的真实和虚假数据的概率都是 0.5。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GAN 的一般结构如上图所示,使用 MNIST 图像作为数据。潜在样本是一个随机向量,生成器用它来构造假图像。当生成器通过训练学习时,它会想出如何将这些随机向量映射到可识别的图像,以欺骗鉴别器。

鉴别器的输出是 sigmoid 函数,其中 0 表示伪图像,1 表示真实图像。如果你只对生成新图像感兴趣,你可以在训练后扔掉鉴别器。

实施:

https://github . com/mchablani/deep-learning/blob/master/gan _ mnist/Intro _ to _ GANs _ exercises . ipynb

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们使用一个泄漏的 ReLU 来允许梯度不受阻碍地流过这个层。TensorFlow 没有为 leaky ReLUs 提供操作,你可以只从一个线性全连接层中取出输出,然后把它们传递给tf.maximum。通常,参数alpha设置负值的输出幅度。因此,负输入(x)值的输出为alpha*x,正x的输出为x:

对于发电机,我们将对其进行培训,同时在培训期间和培训结束后从其取样。鉴别器需要在伪输入图像和真实输入图像之间共享变量。因此,我们可以使用tf.variable_scopereuse关键字来告诉 TensorFlow 重用变量,而不是在我们再次构建图时创建新的变量。

已经发现,对于发电机输出,发电机与 tanh 一起表现最佳。这意味着我们必须将 MNIST 图像重新缩放到-1 和 1 之间,而不是 0 和 1 之间。

**def** generator(z, out_dim, n_units=128, reuse=**False**,  alpha=0.01):    
    **with** tf.variable_scope('generator', reuse=reuse):
        *# Hidden layer*
        h1 = tf.layers.dense(z, n_units, activation=**None**)
        *# Leaky ReLU*
        h1 = tf.maximum(h1, alpha*h1)

        *# Logits and tanh output*
        logits = tf.layers.dense(h1, out_dim, activation=**None**)
        out = tf.nn.tanh(logits)

        **return** out, logits

鉴频器网络与发生器网络几乎完全相同,只是我们使用的是 sigmoid 输出层。

**def** discriminator(x, n_units=128, reuse=**False**, alpha=0.01):
    **with** tf.variable_scope('discriminator', reuse=reuse):
        *# Hidden layer*
        h1 = tf.layers.dense(x, n_units, activation=**None**)
        *# Leaky ReLU*
        h1 = tf.maximum(h1, alpha*h1)

        logits = tf.layers.dense(h1, 1, activation=**None**)
        out = tf.nn.sigmoid(logits)

        **return** out, logits*#* Hyperparameters *# Size of input image to discriminator*
input_size = 784 *# 28x28 MNIST images flattened*
*# Size of latent vector to generator*
z_size = 100
*# Sizes of hidden layers in generator and discriminator*
g_hidden_size = 128
d_hidden_size = 128
*# Leak factor for leaky ReLU*
alpha = 0.01
*# Label smoothing* 
smooth = 0.1

构建网络

tf.reset_default_graph() 
*# Create our input placeholders* 
input_real, input_z = model_inputs(input_size, z_size)  
*# Generator network here* 
g_model, g_logits = generator(input_z, input_size, g_hidden_size, reuse=**False**,  alpha=alpha) 
*# g_model is the generator output* *# Disriminator network here* 
d_model_real, d_logits_real = discriminator(input_real, d_hidden_size, reuse=**False**, alpha=alpha) 
d_model_fake, d_logits_fake = discriminator(g_model, d_hidden_size, reuse=**True**, alpha=alpha)

鉴频器和发电机损耗

对于鉴别器,总损失是真实和伪造图像的损失之和,d_loss = d_loss_real + d_loss_fake

对于真实的图像逻辑,我们将使用从上面单元格中的鉴别器获得的d_logits_real。对于标签,我们希望它们都是 1,因为这些都是真实的图像。为了帮助鉴别器更好地归纳,标签从 1.0 减少到 0.9,例如,使用参数smooth。这被称为标签平滑,通常与分类器一起使用以提高性能。在 TensorFlow 中,它看起来有点像labels = tf.ones_like(tensor) * (1 - smooth)

伪数据的鉴别器损耗是相似的。逻辑是d_logits_fake,它是我们通过将生成器输出传递给鉴别器得到的。这些假逻辑与全零标签一起使用。请记住,我们希望鉴频器为真实图像输出 1,为虚假图像输出 0,因此我们需要设置损耗来反映这一点。

最后,发电机损耗使用d_logits_fake,假图像逻辑。但是,现在的标签都是一。生成器试图欺骗鉴别器,所以它希望鉴别器输出假图像。

*# Calculate losses*
d_labels_real = tf.ones_like(d_logits_real) * (1 - smooth)
d_labels_fake = tf.zeros_like(d_logits_fake)

d_loss_real = tf.nn.sigmoid_cross_entropy_with_logits(labels=d_labels_real, logits=d_logits_real)
d_loss_fake = tf.nn.sigmoid_cross_entropy_with_logits(labels=d_labels_fake, logits=d_logits_fake)

d_loss = tf.reduce_mean(d_loss_real + d_loss_fake)

g_loss = tf.reduce_mean(
    tf.nn.sigmoid_cross_entropy_with_logits(
        labels=tf.ones_like(d_logits_fake), 
        logits=d_logits_fake))

优化者

我们希望分别更新生成器和鉴别器变量。

请注意,当最小化 d_loss 时,我们希望优化器只更新鉴别器变量以及生成器的类似变量。

*# Optimizers*
learning_rate = 0.002

*# Get the trainable_variables, split into G and D parts*
t_vars = tf.trainable_variables()
g_vars = [var **for** var **in** t_vars **if** var.name.startswith("generator")]
d_vars = [var **for** var **in** t_vars **if** var.name.startswith("discriminator")]

d_train_opt = tf.train.AdamOptimizer().minimize(d_loss, var_list=d_vars)
g_train_opt = tf.train.AdamOptimizer().minimize(g_loss, var_list=g_vars)

培养

batch_size = 100
epochs = 100
samples = []
losses = []
saver = tf.train.Saver(var_list = g_vars)
**with** tf.Session() **as** sess:
    sess.run(tf.global_variables_initializer())
    **for** e **in** range(epochs):
        **for** ii **in** range(mnist.train.num_examples//batch_size):
            batch = mnist.train.next_batch(batch_size)

            *# Get images, reshape and rescale to pass to D*
            batch_images = batch[0].reshape((batch_size, 784))
            batch_images = batch_images*2 - 1

            *# Sample random noise for G*
            batch_z = np.random.uniform(-1, 1, size=(batch_size, z_size))

            *# Run optimizers*
            _ = sess.run(d_train_opt, feed_dict={input_real: batch_images, input_z: batch_z})
            _ = sess.run(g_train_opt, feed_dict={input_z: batch_z})

        *# At the end of each epoch, get the losses and print them out*
        train_loss_d = sess.run(d_loss, {input_z: batch_z, input_real: batch_images})
        train_loss_g = g_loss.eval({input_z: batch_z})

        print("Epoch **{}**/**{}**...".format(e+1, epochs),
              "Discriminator Loss: **{:.4f}**...".format(train_loss_d),
              "Generator Loss: **{:.4f}**".format(train_loss_g))    
        *# Save losses to view after training*
        losses.append((train_loss_d, train_loss_g))

        *# Sample from generator as we're training for viewing afterwards*
        sample_z = np.random.uniform(-1, 1, size=(16, z_size))
        gen_samples = sess.run(
                       generator(input_z, input_size, reuse=**True**),
                       feed_dict={input_z: sample_z})
        samples.append(gen_samples)
        saver.save(sess, './checkpoints/generator.ckpt')

*# Save training generator samples*
**with** open('train_samples.pkl', 'wb') **as** f:
    pkl.dump(samples, f)

学分:来自课堂讲稿:https://classroom.udacity.com/nanodegrees/nd101/syllabus

甘实验室:在浏览器中训练甘!

原文:https://towardsdatascience.com/gan-lab-train-gans-in-the-browser-21a423585460?source=collection_archive---------15-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有许多浏览器可视化工具可以帮助机器学习学习者获得对神经网络训练概念的直觉,如 TensorFlow training playground 和 Perceptron Learning Applets:

[## 张量流-神经网络游乐场

这是一种构建从数据中学习的计算机程序的技术。它非常松散地基于我们如何思考…

playground.tensorflow.org](https://playground.tensorflow.org/#activation=tanh&batchSize=10&dataset=circle&regDataset=reg-plane&learningRate=0.03&regularizationRate=0&noise=0&networkShape=4,2&seed=0.42342&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false) [## 感知器

“学习率”框允许您设置一个介于 0 和 1 之间的学习率值(其他值将被忽略)。的…

www.cs.utexas.edu](https://www.cs.utexas.edu/~teammco/misc/perceptron/)

这些浏览器可视化提供了一个很好的 UI 来可视化神经网络如何随着时间的推移而学习,包括它们学习的复杂函数的图。

这个可视化训练 GANs 的新工具对我理解生成性对抗网络的训练过程非常有帮助。我真的很喜欢区分真假样品的视觉效果。GUI 将显示样本如何随时间变化,以及鉴别器和发生器如何改变它们的参数。

有 5 种数据分布可供选择:一条直线、两个簇、一个圆、三个独立的圆和一条头部分离的线。

玩具数据集的不同复杂性会让你感觉到生成器和鉴别器通常需要多少个时期才能达到纳什均衡。

我认为这种可视化最有用的部分是简单地看到假样本是如何随着时间的推移而成型和变化的。通过浏览器界面一遍又一遍地观看这个过程对我初级水平的理解有很大帮助。玩了这个工具之后,Ian Goodfellow 的研究论文对我来说更有意义了。

您可以看到绿色/紫色图表,展示了鉴别器的性能,以便随着时间的推移分离生成的示例。这真的有助于你获得直觉,知道他们在训练中是如何合作的。

观察生成器的输出最终如何收敛到一组与真实数据点不完全相同的样本也很有趣。

这个工具的另一个非常好的特性是算法的顺序标记:

鉴别器更新

  1. 生成器从噪声中获取样本
  2. 鉴别器对样品进行分类(结合真假)
  3. 计算鉴频器损耗
  4. 计算机鉴别器梯度
  5. 基于梯度更新鉴别器

发电机更新

  1. 生成器从噪声中获取样本
  2. 鉴别器只对假样本进行分类
  3. 计算发电机损耗
  4. 计算发电机梯度
  5. 基于渐变更新生成器

我认为,除了样本和损耗图的 GUI 之外,可视化算法的步骤是理解 GAN 训练过程的一个非常好的工具。

最后,非常有趣的是,鉴频器和发电机的损耗在多个时期内收敛到相同的值。我认为这是最小最大对抗训练理论上所依据的纳什均衡的表现。

结论

我真的很高兴我发现这个工具有助于我对生成性对抗网络的理解,尤其是训练过程:请亲自检查一下!

[## 甘实验室:在你的浏览器中玩生成性对抗网络!

GAN 实验室使用的是浏览器内 GPU 加速的深度学习库 TensorFlow.js。一切,从模特培训到…

poloclub.github.io](https://poloclub.github.io/ganlab/)

CShorten

Connor Shorten 是佛罗里达大西洋大学计算机科学专业的学生。对软件经济学、深度学习和软件工程感兴趣。

GAN 目标函数:GAN 及其变体

原文:https://towardsdatascience.com/gan-objective-functions-gans-and-their-variations-ad77340bce3c?source=collection_archive---------5-----------------------

gan 有数百种类型。目标函数如何影响 GAN 的外观?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你还没有,你一定要读一读我的上一篇关于 GAN 是什么的文章(尤其是当你不知道我说 GAN 是什么意思的时候!).这篇文章应该给你一个深入 GANs 世界和他们如何工作的起点。对于任何关于 GANs 的文章来说,这都是一个坚实的基础,更不用说在这篇文章中,我们将讨论 GANs 的目标函数,以及目前存在的使用 twists 来定义不同结果的目标的 GANs 的其他变体。

没时间看完整本?这是 TL。速度三角形定位法(dead reckoning)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

定义目标

在我们的介绍性文章中,我们谈到了生成模型。我们讨论了生成模型的目标是如何想出一种方法来将它们生成的分布与真实的数据分布相匹配。最小化两个分布之间的距离对于创建一个系统来说是至关重要的,该系统生成的内容看起来很好,很新,就像来自原始数据分布一样。

但是我们如何衡量我们生成的数据分布和我们原始的数据分布之间的差异呢?这就是我们所说的目标函数,也是今天这篇文章的重点!我们将研究 gan 的一些变化,以了解我们如何改变生成的数据分布与实际分布之间的差异,以及这将产生的影响。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原甘

我们最初的 GAN 的目标函数本质上是最小化所谓的詹森香农发散 (JSD)。具体来说是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

JSD 源自我们在上一篇文章中提到的库尔巴赫-利布勒背离(KLD)。

我们已经熟悉了我们的朋友,原来的甘。与其进一步讨论这个问题,不如让我们欣赏一下它辉煌的表现:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

瓦瑟斯坦·甘

wasser stein GAN(WGAN)是一种你可能听说过的 GAN,因为它得到了很多关注。这样做有很多实际的原因(一般来说,当你训练一个 GAN 时,返回的损失值没有任何意义,除了 WGAN 以外),但是是什么让 WGAN 与众不同呢?

WGAN 不使用 JSD 来测量散度,而是使用一种叫做推土机(EM)距离(又名瓦瑟斯坦距离)的东西。EM 距离定义为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是什么意思?

电磁距离

让我们试着理解 EM 距离背后的直觉。概率分布本质上是质量的集合,分布测量给定点的质量数量。我们给 EM 距离两个分布。因为将质量移动一定距离的成本等于质量和距离的乘积,所以 EM 距离基本上计算将一种概率分布转换成另一种概率分布的最小成本。这可以被视为所需的最小努力。

但是我们为什么要在乎呢?我们关心 EM 距离,因为它经常测量从一个分布到另一个分布的直线距离。这有助于优化梯度。更不用说,还有一组函数在用 KLD 或 JSD 之类的东西测量距离时不会收敛,但在 EM 距离上确实会收敛。

这是因为 EM 距离具有连续性和可微性的保证,而这正是像 KLD 和 JSD 这样的距离函数所缺乏的。我们需要这些损失函数的保证,使 EM 距离更适合我们的需要。不仅如此,所有在 JSD 或 KLD 下聚合的东西也会在 EM 距离下聚合。只是电磁距离包含了更多。

这是怎么用的?

抛开所有这些关于数学的想法,进入这类事情的实际应用,当我们不能直接计算时,我们如何使用这个新的距离?首先,我们采用一个参数化的 critic 函数,并训练它来逼近我们的数据分布和我们生成的分布之间的 EM 距离。当我们做到了这一点,我们就有了一个很好的 EM 距离近似值。在此基础上,我们优化我们的发电机功能,以减少这一电磁距离。

为了保证我们的函数位于一个紧凑的空间中(这有助于确保我们满足进行计算所需的理论保证),我们剪切了参数化我们的评价函数 f 的权重。

只是一个旁注:我们的 critic 函数 f 被称为 critic,因为它不是一个显式的鉴别器。鉴别器会将其输入分类为真或假。批评家不会这么做。critic 函数只是近似距离分数。然而,它在传统的 GAN 框架中扮演着鉴别者的角色,因此值得强调一下它的相似之处和不同之处。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • 有意义损失函数
  • 更容易调试
  • 更简单的超参数搜索
  • 提高稳定性
  • 更少的模式崩溃(当一个生成器只是一遍又一遍地生成一个东西的时候……稍后会有更多的介绍)
  • 理论优化保证

改进的 WGAN

用 WGAN 提出了那么多好的东西,还有什么需要改进的?嗯,对瓦瑟斯坦·甘斯的改进训练凸显了这一点。

WGAN 得到了很多关注,人们开始使用它,好处就在那里。但是人们开始注意到,尽管 WGAN 带来了所有的东西,但它仍然无法收敛或产生非常糟糕的样本。改进的 WGAN 给出的理由是重量削减是一个问题。在某些情况下,它弊大于利。我们注意到,我们对 clip 进行加权的原因与保持 critic 函数的理论保证有关。但在实践中,剪辑实际上是鼓励非常简单的批评功能被推到其边界的极端。这可不好。

相反,改进的 WGAN 提出的是,不削减权重,而是在 critic 函数的梯度范数中添加一个惩罚项。他们发现,这可以产生更好的结果,当插入一堆不同的 GAN 架构时,可以产生稳定的训练。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • 完全 WGAN,除了没有重量剪辑
  • 加权正则项鼓励理论保证

最小平方甘

LSGAN 的设置类似于 WGAN。然而,LSGAN 不是学习一个批判函数,而是学习一个损失函数。真样品的损失应低于假样品的损失。这使得 LSGAN 可以高度关注利润非常高的假样本。

像 WGAN 一样,LSGAN 试图限制它们的功能域。他们采取不同的方法,而不是剪辑。他们以权重衰减的形式引入正则化,鼓励其函数的权重位于保证理论需求的有界区域内。

另一点需要注意的是,损失函数的设置与原始 GAN 更相似,但原始 GAN 使用对数损失,LSGAN 使用 L2 损失(相当于最小化皮尔逊 X 散度)。其原因与以下事实有关:对数损失基本上只关心样品标记是否正确。它不会基于所述样本与正确分类的距离而受到严重惩罚。如果一个标签是正确的,它不会进一步担心它。相比之下,L2 损失不在乎距离。远离它应该在的地方的数据将按比例被扣分。LSGAN 认为这产生了更多的信息梯度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • 损失函数而不是批评家
  • 有界损失函数的权重衰减正则化
  • 比例惩罚的 L2 损失而不是对数损失

放松的 Wasserstein GAN

或者简称为 RWGAN 是 WGAN 论文的另一种变体。他们将他们的 RWGAN 描述为 WGAN 和改进的 WGAN(他们在论文中引用的 WGAN-GP)之间的快乐媒介。RWGAN 采用非对称箝位策略,而不是对称箝位(如 WGAN)或梯度惩罚(如针对改进的 WGAN 提出的)。

除了他们提出的特定 GAN 架构之外,他们还描述了他们所谓的统计类别的偏差(称为宽松 Wasserstein 偏差或 RW 偏差)。RW 散度从 WGAN 论文中提取了 Wasserstein 散度,并使其更具一般性,概述了一些关键的概率性质,这些性质是为了保持我们的 GAN 的一些理论保证所需要的。

他们特别表明,用 KL 散度参数化的 RWGAN 相对于其他最先进的 GAN 极具竞争力,但甚至比常规 WGAN 具有更好的收敛特性。他们还开放了他们的框架,以定义新的损失函数,从而为设计 GAN 方案定义新的成本函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • 重量不对称夹紧
  • 通用 RW 散度框架,非常适合设计新的 GAN 模式、成本和损失函数

麦根

与 GAN (McGAN)匹配的均值和协方差特征属于与 WGAN 相同的 GAN 家族。这个家族被称为积分概率度量(IPM)家族。这些 gan 是那些使用批判架构而不是显式鉴别器的。

McGAN 的 critic 函数与测量生成数据分布和目标数据分布的均值或协方差特征有关。从名字上看,这似乎也很简单。他们定义了创建 critic 函数的两种不同方法,一种用于均值,一种用于协方差,并演示了如何实际使用它们。像 WGAN 一样,他们也在他们的模型上使用裁剪,这最终限制了模型的容量。这篇论文没有得出什么重大的结论。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • 临界函数距离的均值和协方差测度

生成矩匹配网络

生成矩匹配网络 (GMMN)专注于最小化所谓的最大平均差异 (MMD)。MMD 本质上是两个分布的嵌入空间的平均值,我们在这里试图最小化两个平均值之间的差异。我们可以使用一种叫做内核技巧的东西,它允许我们作弊并使用高斯内核来计算这个距离。

他们认为,这允许一个简单的目标,可以很容易地用反向传播进行训练,并产生与标准 GAN 竞争的结果。他们还展示了如何将自动编码器添加到这个 GAN 的架构中,以减少精确估计 MMD 所需的训练量。

补充说明:虽然他们声称有竞争性的结果,但从我在别处读到的来看,他们的实证结果似乎经常是缺乏的。此外,这个模型的计算量相当大,所以在我看来,计算资源和性能的权衡似乎并不存在。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • 使用最大平均偏差(MMD)作为距离/目标函数
  • 没有鉴别器,只是测量样本之间的距离
  • 添加自动编码器来帮助测量 MMD

最大均值差异 GAN 或 MMD GAN,你猜对了,是 GMMN 的改进。他们的主要贡献在于没有使用静态高斯核来计算 MMD,而是使用对抗技术来学习核。它结合了最初 GAN 和 GMMN 论文的思想,创建了两者思想的混合体。它声称的好处是性能和运行时间的提高。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • GMMN 上的迭代:估计 MMD 的对立学习核

克拉默·甘

Cramer GAN 首先概述了流行的 WGAN 的一个问题。它声称概率散度应该满足三个性质:

  • 和不变性
  • 标度灵敏度
  • 无偏样本梯度

在这些性质中,他们认为沃瑟斯坦距离缺少最后一个性质,不像 KLD 或 JSD 都有。他们证明这实际上是一个实际问题,并提出了一个新的距离:克莱姆距离。

克莱姆距离

现在如果我们看看克莱姆距离,我们可以看到它看起来有点类似于 EM 距离。然而,由于其数学差异,它实际上不会像 EM 距离那样遭受有偏差的样本梯度。如果你真的想深入研究它的数学原理,论文中已经证明了这一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • 克莱姆距离而不是电磁距离
  • 对 WGAN 的改进:无偏样本梯度

费希尔·甘

在 IPM GAN 声称在许多方面超过 McGAN、WGAN 和改进的 WGAN 的基础上, Fisher GAN 又是一次迭代。它所做的是设置其目标函数,使其具有一个对其二阶矩(也称为方差)具有数据相关约束的评论家。

基于这一目标,Fisher GAN 拥有以下优势:

  • 训练稳定性
  • 无约束容量
  • 高效计算

是什么让费希尔·甘的《远方》与众不同?事实上,它本质上是测量所谓的 Mahalanobis 距离,简单来说,就是具有相关变量的两点之间相对于质心的距离,质心被认为是多元数据分布的平均值。这实际上保证了生成器和批评家会像我们期望的那样被绑定。当参数化的 critic 接近无限容量时,它实际上估计了卡方距离。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • 对 WGAN 和其他 IPM GANs 的改进
  • 拥有训练稳定性、不受约束的容量和高效的计算时间
  • 卡方距离物镜

基于能源的氮化镓

基于能源的 GAN (EBGAN)是我们今天收集的 GAN 中有趣的一种。它不像最初的 GAN 那样使用鉴别器,而是使用自动编码器来估计重建损失。设置的步骤如下:

  • 根据原始数据训练自动编码器
  • 现在通过这个自动编码器运行生成的图像
  • 生成不好的图像会有可怕的重建损失,因此这现在成为一个很好的措施

这是一种非常酷的设置 GAN 的方法,通过正确的调整来防止模式崩溃(生成器只是一遍又一遍地产生相同的样本),它看起来相当不错。

那为什么还要这么做呢?经验表明,以这种方式使用自动编码器实际上会产生快速、稳定且对参数变化具有鲁棒性的 GAN。更重要的是,没有必要尝试和拉一堆技巧来平衡鉴别器和生成器的训练。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • 自动编码器作为鉴别器
  • 重建损耗用作成本,设置类似于原始 GAN 成本
  • 快速、稳定和强大

边界平衡 GAN

边界平衡 GAN(begined)是在 EBGAN 上的迭代。相反,它以类似于 WGAN 损失函数的方式使用自动编码器重建损失。

为了做到这一点,需要引入一个参数来平衡鉴别器和发生器的训练。该参数被加权为样本的移动平均值,在改进的两个一半之间的边界上跳舞(因此它得名:“边界平衡”)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • EBGAN 的迭代
  • 成本函数与 WGAN 的表面相似性

边缘适应 GAN

【缘改编】甘(马江)最后一个上榜。这是艾根的另一个变种。作为损失函数的一部分,EBGAN 有一个余量来产生铰链损失。MAGAN 所做的是随着时间的推移单调减少这一差额,而不是保持不变。这样做的结果是鉴别器将更好地自动编码真实样本。

我们关心的结果是:更好的样本和更稳定的训练。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关键要点

  • EBGAN 上的迭代
  • 铰链损耗的自适应余量
  • 更稳定,质量更好

包扎

那是许多不同的甘斯!而且内容很多!我认为,为了让我们更有条理,有必要在表格中总结一下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

咻…拍拍自己的背,那是很多甘的内容。

如果我错过了什么或误解了什么,请纠正我!

如果你喜欢这篇文章,或者觉得它有任何帮助,如果你给我一个长长的一两美元来资助我的机器学习教育和研究,我会永远爱你!每一美元都让我离成功更近一步,我永远心存感激。

敬请关注近期更多 GAN 博客!

原载于hunterheidenreich.com

氮化镓——提高氮化镓性能的方法

原文:https://towardsdatascience.com/gan-ways-to-improve-gan-performance-acf37f9f59b?source=collection_archive---------1-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Andy Beales

与其他深度网络相比,GAN 模型在以下方面可能会受到严重影响。

  • 不收敛 :模型不收敛,更糟的是变得不稳定。
  • 模式崩溃 :发电机产生有限的模式,并且
  • **慢速训练:**训练发电机的梯度消失了。

作为 GAN 系列的一部分,本文探讨了如何改进 GAN 的方法。特别是,

  • 为了更好的优化目标,改变成本函数。
  • 向成本函数添加额外的惩罚以加强约束。
  • 避免过度自信和过度适应。
  • 优化模型的更好方法。
  • 添加标签。

但是请注意,这是一个动态的话题,因为研究仍然非常活跃。

特征匹配

生成器试图找到最佳图像来欺骗鉴别器。当两个网络都对抗他们的对手时,“最佳”形象不断变化。但是,优化可能会变得过于贪婪,从而陷入一场永无休止的猫捉老鼠的游戏。这是场景之一,模型不收敛,模式崩溃。

特征匹配改变生成器的成本函数,以最小化真实图像和生成图像的特征之间的统计差异。通常,我们测量它们的特征向量的平均值之间的 L2 距离。因此,特征匹配将目标从击败对手扩展到真实图像中的特征匹配。这是新的目标函数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中**f(x)是鉴别器在即时层中提取的特征向量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

计算每个小批量的真实图像特征的平均值,该平均值在每个批量上波动。这是减轻模式崩溃的好消息。它引入了随机性,使得鉴别器更难过拟合。

当 GAN 模型在训练期间不稳定时,特征匹配是有效的。

迷你批次鉴别

当模式崩溃时,所有创建的图像看起来都相似。为了缓解这个问题,我们将真实图像和生成图像分批次分别输入鉴别器,并计算图像 x 与同批次图像的相似度。我们将相似度 o(x) 附加在鉴别器中的一个稠密层中,来分类这个图像是真实的还是生成的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果模式开始崩溃,生成图像的相似性会增加。鉴别器可以使用该分数来检测生成的图像,并且如果模式崩溃,则惩罚生成器。

通过变换矩阵计算图像与同批其他图像之间的相似度 o(xi) 。方程式有点难追踪,但是概念很简单。但是,如果您愿意,可以随意跳到下一部分。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在上图中,为输入图像, xj 为同一批次的其余图像。我们用一个变换矩阵 T 将特征变换为 Mi 这是一个 B×C 矩阵。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们使用 L1 范数和下面的等式导出图像 ij 之间的相似度 c(xi,xj)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图像与批中其余图像之间的相似度 o(xi)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以下是概要:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

引用“训练 GANs 的改进技术”一文中的话

微型批次鉴别使我们能够非常快速地生成视觉上吸引人的样品,在这方面,它优于特征匹配。

单面标签平滑

深层网络可能会因过度自信而受损。例如,它使用很少的特征来分类一个对象。为了缓解这个问题,深度学习使用监管和辍学来避免过度自信。

在 GAN 中,如果鉴别器依赖于一小组特征来检测真实图像,则生成器可能仅产生这些特征来利用鉴别器。优化可能会变得过于贪婪,并且不会产生长期效益。在甘看来,过度自信伤害很大。为了避免这个问题,当任何真实图像的预测超过 0.9 时,我们惩罚鉴别器( D(真实图像)> 0.9 )。这是通过将我们的目标标签值设置为 0.9 而不是 1.0 来实现的。下面是伪代码:

**p = tf.placeholder(tf.float32, shape=[None, 10])# Use 0.9 instead of 1.0.
feed_dict = {
  p: [[0, 0, 0, 0.9, 0, 0, 0, 0, 0, 0]] # Image with label "3"
}# logits_real_image is the logits calculated by 
# the discriminator for real images.
d_real_loss = tf.nn.sigmoid_cross_entropy_with_logits(
                    labels=p, logits=logits_real_image)**

历史平均

在历史平均中,我们跟踪最近 t 模型的模型参数。或者,如果我们需要保持一个长的模型序列,我们更新模型参数的运行平均值。

我们将下面的 L2 成本添加到成本函数中,以惩罚不同于历史平均值的模型。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于具有非凸目标函数的 GANs,历史平均可以阻止模型围绕平衡点旋转,并作为阻尼力来收敛模型。

体验回放

模型优化可能过于贪婪,会破坏生成器当前正在生成的内容。为了解决这个问题,experience replay 保留了从过去的优化迭代中最近生成的图像。不是仅用当前生成的图像来拟合模型,我们还将所有最近生成的图像馈送给鉴别器。因此,对于生成器的特定时间实例,鉴别器不会过拟合。

使用标签(CGAN)

许多数据集带有其样本对象类型的标签。训练甘已经很难了。因此,在指导 GAN 训练方面的任何额外帮助都可以大大提高性能。添加标签作为潜在空间 z 的一部分有助于 GAN 训练。下面是在 CGAN 中使用的数据流,以利用样本中的标签。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

成本函数

成本函数重要吗?否则所有的研究努力都会白费。但如果你听说了一篇 2017 年的谷歌大脑论文,你肯定会产生怀疑。但是推画质还是重中之重。很可能,我们会看到研究人员尝试不同的成本函数,然后我们才有一个明确的答案。

下图列出了一些常见 GAN 模型的成本函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Table modified from here.

我们决定不在本文中详述这些成本函数。下面是详细介绍一些常用代价函数的文章: WGAN/WGAN-GPEBGAN/beginLSGANRGAN 和 RaGAN 。在本文的最后,我们列出了一篇更详细地研究所有这些成本函数的文章。由于成本函数是 GAN 的一个主要研究领域,我们鼓励您稍后阅读该文章。

这里是一些数据集的 FID 分数(越低越好)。这是一个参考点,但需要注意的是,现在就得出什么样的成本函数表现最好的结论还为时过早。事实上,还没有一个成本函数在所有不同的数据集中表现得最好。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source

(MM GAN 是原论文中的 GAN 代价函数。NS GAN 是在同一篇论文中解决消失梯度的替代成本函数。)

但是如果没有好的超参数,任何模型都不会表现良好,而且调整 gan 需要时间。在随机测试不同的成本函数之前,对超参数优化要有耐心。一些研究人员提出,调整超参数可能比改变成本函数获得更好的回报。一个仔细调整的学习率可能会减轻一些严重的甘问题,如模式崩溃。具体来说,当模式崩溃发生时,降低学习速率并重新进行训练。

我们还可以为生成器和鉴别器试验不同的学习速率。例如,下图在 WGAN-GP 训练中对鉴别器使用 0.0003 的学习率,对生成器使用 0.0001 的学习率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source

实施技巧

  • 在-1 和 1 之间缩放图像像素值。使用 tanh 作为发生器的输出层。
  • 高斯分布的实验采样 z
  • 批量标准化通常可以稳定训练。
  • 使用 PixelShuffle 和转置卷积进行上采样。
  • 避免缩减采样的最大池化。使用卷积步幅。
  • Adam optimizer 通常比其他方法效果更好。
  • 在将真实图像和生成的图像输入鉴别器之前,向它们添加噪声。

GAN 模型的动力学还没有被很好地理解。因此,一些提示只是建议,里程可能会有所不同。例如,LSGAN 的论文报告了 RMSProp 在他们的实验中有更稳定的训练。这种情况很少见,但证明了提出一般性建议的挑战。

鉴别器和生成器不断地与他人竞争。做好成本函数值可能上下波动的准备。不要过早地停止培训,即使成本可能会上升。直观地监控结果,以验证培训的进度。

虚拟批量标准化(VBN)

批量规范化 BM 成为许多深度网络设计中事实上的标准。BM 的平均值和方差来自当前的小批量。然而,它在样本之间产生了依赖性。生成的图像不是相互独立的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这反映在实验中,实验产生的图像显示同一批中的色调。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Orange tone on the top batch and greenish tone on the second. Source

最初,我们从随机分布中抽取 z 的样本,这给了我们独立的样本。然而,批量标准化产生的偏差压倒了 z 的随机性。

虚拟批次标准化(VBN)在训练前对参考批次进行采样。在正向传递中,我们可以预先选择一个参考批次来计算 BN 的归一化参数( μ 和σ)。但是,我们将使用该参考批次过度拟合模型,因为我们在整个训练中使用相同的批次。为了减轻这种情况,我们可以将参考批次与当前批次结合起来计算归一化参数。

随机种子

用于初始化模型参数的随机种子影响 GAN 的性能。如下所示,在 50 次单独运行(训练)中,用于测量 GAN 性能的 FID 分数有所不同。但是范围相对较小,并且可能仅在稍后的微调中完成。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source

谷歌大脑的一篇论文指出,LSGAN 偶尔会在一些数据集中失败或崩溃,需要用另一个随机种子重新开始训练。

批量标准化

DGCAN 强烈建议在网络设计中加入 BM。BM 的使用也成为许多深度网络模型中的普遍做法。然而,也会有例外。下图展示了 BN 对不同数据集的影响。y 轴是 FID 分数,越低越好。正如 WGAN-GP 论文所建议的,BN 在使用时应该是关闭的。我们建议读者在 BN 上检查所使用的成本函数和相应的 FID 性能,并通过实验验证设置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Modified from source.

光谱归一化

频谱归一化是一种权重归一化,稳定了鉴别器的训练。它控制鉴别器的 Lipschitz 常数以减轻爆炸梯度问题和模式崩溃问题。这个概念在很大程度上基于数学,但从概念上讲,它限制了每次迭代中的权重变化,而不是过度依赖于鉴别器在区分图像时的一小组特征。与 WGAN-GP 相比,这种方法计算量小,并实现了困扰许多 GAN 方法的良好模式覆盖。

多个 GANs

模式崩溃也许并不全是坏事。当模式崩溃时,图像质量通常会提高。事实上,我们可以收集每个模式的最佳模型,并使用它们来重新创建不同模式的图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source

鉴别器和发生器之间的平衡

鉴别者和生成者总是在进行一场互相削弱的拉锯战。模式崩溃和梯度递减通常被解释为鉴别器和发生器之间的不平衡。我们可以通过将注意力转向平衡发生器和鉴频器之间的损耗来改进 GAN。不幸的是,解决方案似乎难以捉摸。我们可以在鉴别器和生成器上保持梯度下降迭代次数之间的静态比率。即使这看起来很吸引人,但许多人怀疑它的好处。通常,我们保持一比一的比例。但是一些研究人员也测试了每次生成器更新 5 次鉴别器迭代的比率。还提出了用动态机制平衡两个网络。但直到最近几年,我们才开始关注它。

另一方面,一些研究人员质疑平衡这些网络的可行性和可取性。一个训练有素的鉴别器无论如何都会给生成器提供质量反馈。还有,训练发电机总是追上鉴别器也不容易。相反,我们可以把注意力转移到寻找一个成本函数,当发电机表现不好时,该成本函数不具有接近零的梯度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然而,问题依然存在。提出了许多成本函数的建议,但关于什么是最好的建议的争论仍然存在。

鉴别器和发电机网络容量

鉴别器的模型通常比发生器更复杂(更多过滤器和更多层),好的鉴别器提供高质量的信息。在许多 GAN 应用中,我们可能会遇到瓶颈,即增加发电机容量并不能提高质量。在我们发现瓶颈并解决它们之前,增加发电机容量似乎不是许多分区商的首要任务。

比根

BigGAN 于 2018 年出版,目标是为 GAN 收集当时生成最佳图像的一些实践。在本节中,我们将研究一些尚未涉及的实践。

批量更大

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source (The smaller the FID score, the better)

如上所示,增加批量会使 FID 显著下降。批量越大,覆盖的模式就越多,并为两个网络学习提供更好的梯度。但是,BigGAN 报告说,该模型在更少的迭代中达到了更好的性能,但之后变得不稳定,甚至崩溃。所以,不断保存模型。

截断绝招

潜在空间中的低概率密度区域 z 可能没有足够的训练数据来准确学习。所以在生成图像时,我们可以避开那些区域,以变差为代价来提高图像质量。即图像的质量将会提高,但是那些生成的图像在风格上具有较低的变化。截断输入潜在空间 z 有不同的技术。一般原则是,当值落在范围之外时,它将被重新采样或挤压到更高概率的区域。

增加型号容量

在调整过程中,考虑增加模型的容量,尤其是对于具有高空间分辨率的图层。许多型号在将当时使用的传统容量增加一倍后,性能有所提高。但是在没有首先对模型设计和实现进行校对的情况下,不要做得太早。

发电机重量的移动平均值

生成器使用的权重是根据生成器权重的指数移动平均值计算的。

正交正则化

权重矩阵的条件是一个重要的研究课题。这是一项关于函数输出对其输入变化的敏感程度的研究。对训练稳定性影响较大。矩阵 Q 是正交的,如果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们用一个正交矩阵乘以 x ,那么 x 的变化就不会被放大。这种行为对于保持数值稳定性是非常理想的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于其他属性,保持权重矩阵的正交属性在深度学习中可能是有吸引力的。我们可以添加一个正交正则化,以鼓励在训练过程中这样的属性。如果 Q 偏离正交矩阵,它会对系统不利。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然而,这是众所周知的太局限,因此比根使用了一个修改的术语:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正交正则化还允许截断技巧在不同的模型中更加成功。

正交权重初始化

模型权重被初始化为随机正交矩阵。

跳 z 连接

在普通 GAN 中,潜在因子 z 仅输入到第一层。使用 skip-z 连接,潜在因素 z 的直接跳过连接(skip-z)连接到发电机的多个层,而不仅仅是第一层。

进一步阅读

在本文中,我们不通过成本函数来详述改进。这是一个重要的话题,我们建议读者阅读下面的文章:

** [## 甘——甘黑帮综论(下)

本文研究了 GAN 研究的动机和改进方向。通过在一个…

medium.com](https://medium.com/@jonathan_hui/gan-a-comprehensive-review-into-the-gangsters-of-gans-part-2-73233a670d19)

了解更多 GANs 的酷炫应用:

[## GAN——GAN 的一些酷应用。

在 GAN 开发的最初几年,我们取得了令人瞩目的进展。再也没有邮票大小的面部照片了…

medium.com](https://medium.com/@jonathan_hui/gan-some-cool-applications-of-gans-4c9ecca35900)

本系列的所有文章。

[## GAN — GAN 系列(从头到尾)

我们文章的完整列表涵盖了 GAN 的应用、问题和解决方案。

medium.com](https://medium.com/@jonathan_hui/gan-gan-series-2d279f906e7b)

参考

训练 GANs 的改进技术**

GANGogh:用 GANs 创造艺术

原文:https://towardsdatascience.com/gangogh-creating-art-with-gans-8d087d8f74a1?source=collection_archive---------1-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Novel Generation of Flower Paintings

简介:

这里介绍的工作是肯尼·琼斯和德里克·博纳菲利娅(均为威廉姆斯学院 2017 级)在教授安德里亚·丹尼卢克的指导下进行的长达一个学期的独立研究的结果。与这个项目相关的代码可以在 https://github.com/rkjones4/GANGogh找到。Kenny 和 Derrick 明年都将作为软件工程师前往脸书,并希望继续研究 GANs。

背景:

生成敌对网络(GANS)是由伊恩·古德菲勒等人提出的。艾尔。在 2014 年的一篇论文中。gan 解决了深度生成模型与深度判别模型相比缺乏相对成功的问题。作者引用最大似然估计的难以处理的本质作为这种差异的原因,最大似然估计是大多数生成模型所必需的。因此,gan 被设置为利用深度判别模型的强度来绕过最大似然估计的必要性,从而避免传统生成模型的主要缺陷。这是通过使用相互竞争的生成模型和判别模型来训练生成器来实现的。本质上,“生成模型可以被认为类似于一队伪造者,试图生产假币并在不被发现的情况下使用,而辨别模型类似于警察,试图检测假币。这场游戏中的竞争促使两个团队改进他们的方法,直到无法区分假冒品和真品。”更具体地说:

为了了解发生器在数据 x 上的分布 Pg,我们定义了输入噪声变量 Pz(z)的先验,然后将到数据空间的映射表示为 G(z;θg),其中 G 是由具有参数θg 的多层感知器表示的可微分函数。我们还定义了第二个多层感知器 D(x;θd ),它输出单个标量。D(x)代表 x 来自数据而不是 Pg 的概率。我们训练 D 以最大化为训练样本和来自 G 的样本分配正确标签的概率,同时训练 G 以最小化 log(1D(G(z))。换句话说,D 和 G 用价值函数 V (G,D)玩以下两人极小极大博弈:min G max D V (D,G)= Ex∾Pdata(x)[log D(x)]+Ez∾Pz(z)[log(1d(G(z))]。(1)"

该游戏通过交替训练 G 和 D 来进行,直到达到纳什均衡,并且 G 产生的样本与数据集中的样本无法区分。该公式立即受到怀疑,因为该论文的作者解释说,这种方法会导致饱和梯度,因此他们在实际训练时使用了不同的公式。然而,在发表时,这一公式产生了一些已经发布的任何模型中最有前途的生成样本,并且它的一般结构允许其他人调整设计来创建问题的更细微的实例(good fellow et al .艾尔。2014).

辅助量词 GAN(AC-GAN)是 Augustus Odena 等人引入的。艾尔。2016 年。AC-GAN 为鉴别器增加了一个分类器层,为发生器增加了一个条件向量。然后,训练鉴别器,除了传统的真与假的 GAN 目标之外,还最小化分类误差。这种方法允许利用标签,并向 GAN 提供附加信息。此外,它还允许对发生器进行调节,以产生特定类别的样本。目前,这可能是最有效的条件 GAN,并且往往比使用未标记数据的 GAN 做得更好。这个模型利用了迁移学习和多任务学习(Odena et .艾尔。2016).

StackGAN 是由张等人介绍的。艾尔。2016 年。StackGAN 使用从递归神经网络检索的特征信息和两阶段图像生成过程——第一阶段从噪声向量创建低分辨率图像,第二阶段使用第一图像的编码来创建高分辨率图像。特征信息用于调节鉴别器和发生器。这种模型创造了高分辨率样品的艺术状态。

Wasserstein GAN(WGAN)是由 Martin Arjovsky 等人提出的。艾尔。并引入了一个基于理论和经验发现的新理论框架。通过这个新的框架,他们创建了 WGAN,该 WGAN 最小化了 wasserstein 距离的近似值,他们发现该距离对于生成性建模问题具有有用的理论属性,因为它在鉴别器中创建了更好的梯度,生成器可以更容易地从中学习(Arjovsky 等人。艾尔。2017).他们实施某些约束的方式被证明是不一致的,Ishaan Gulrajani 使用基于梯度的惩罚来约束鉴别器的斜率,从而对其进行了改进。该模型被发现在训练从通常模型到以前无法训练的模型的各种 gan 时非常健壮和有效(Gulrajani 2017)。

Wavenet 和 Conditional PixelCNN 是 2016 年谷歌出来的两个生成模型。GANs 也不是,但两者都利用了一个有趣的概念,叫做全球调节。全局调节的关键是使用调节向量,而不是在开始时一次性添加到噪声向量,而是作为神经网络中每个激活函数的调节向量。这允许比传统方法更强和更复杂的调节。他们还都使用门控乘法激活函数,这似乎与这种全局条件作用很好地啮合(van den Oord 2016 范登奥尔德 2016)。

目标:

我们本学期学习 GAN 的主要动机是试图将 GAN 衍生的模型应用于小说艺术的生成。深度学习中与艺术生成相关的许多工作都专注于风格,特别是特定艺术作品的风格。在诸如艺术风格的神经算法等论文中,深度学习网络学习 1)将一件艺术品的风格与其内容区分开来,2)将该风格应用于其他内容表示。通过建立 GAN 模型,我们希望建立一个深度网络,不仅能够学习许多不同艺术作品的风格和内容组件的分布,而且能够以新颖的方式组合这些组件来创建新的艺术作品。新颖内容生成的任务比将一个特定艺术作品的风格应用到另一个艺术作品的内容要困难得多。

数据集和集合:

由于 GAN 的生成组件只能学习表示呈现给鉴别器的真实分布,因此选择合适的绘画数据集对我们来说是一个至关重要的决定。我们首先尝试使用仅来自一位艺术家的绘画数据集:莫奈。经过几次初始测试后,我们发现我们在这个数据集上的模型收敛很差,因为只有 1200 幅画的数据集太小了。我们需要找到一种方法来增加我们的数据集的大小,所以我们求助于 wikiart 数据库,这是一个超过 100,000 幅绘画的集合,所有这些绘画都标有风格,流派,艺术家,绘画制作年份等(wikiart)。从这个数据集,我们知道我们将 1)有足够的数据使我们的模型可能收敛,2)我们将能够使用标记信息来提高我们的网络的学习能力:在 GAN 场景中,当训练时使用额外的条件信息通常是有帮助的,特别是当学习具有清晰子分布的分布时(即,风景与肖像)。在我们模型的最终版本中,我们通过创建 python 脚本来构建数据集,直接从 wikiart 网站上抓取超过 80,000 张单独的图像,同时保留每张图像的风格和流派标签。

型号:

在设计我们的模型时,我们希望在典型 AC-GAN 框架的扩展中利用改进的 wasserstein 度量的能力。在一个高层次上,这意味着我们最初在改进的 wasserstein 模型下设置我们的鉴别器和生成器,但是除此之外,我们还向我们的鉴别器添加了一个分类组件,它还将尝试预测给定绘画的流派。然后,我们的生成器被扩充以接收标签数据的一个热点向量,其目的是影响所生产的绘画的流派。我们可以通过向我们的鉴别器的成本函数添加一个惩罚项来加强这种度量,该惩罚项试图最小化它对给定绘画的真实流派的流派预测的交叉熵,并向我们的生成器添加一个惩罚项,试图最小化鉴别器的预测与它根据条件向量被指示做出的流派的交叉熵。

我们对标准 GAN 模型进行的另外两项修改是包括了预训练和全局调节。这两个添加都是在我们观察到我们的模型在第一次迭代中非常注重产生“真实”与“虚假”图像的趋势后做出的,只是后来才学会在调节流派时提供不同类型的表示。我们假设其中一个原因是,当开始训练时,我们的鉴别器根本没有学会流派之间的区别,结果是生成器不能像我们希望的那样早地开始区分。我们提出的解决方案是在任何生成器训练之前对我们的鉴别器进行预训练,通过这种方式让我们的鉴别器对不同流派之间的差异有一个初步的了解。在普通 GAN 公式中,这将导致有问题的行为和较低的收敛机会,但当我们使用 wasserstein 度量时,它限制了鉴频器的功率,并始终为发生器提供平滑的梯度,我们实际上在此框架下达到了更优化的状态:在 GAN 设置的“优化”公式中,我们将在每个发生器训练步骤之前训练鉴频器收敛。

我们包含的全局条件再次允许我们的生成器更好地区分其产生的内容,作为其条件向量的结果。全局调节背后的思想是,每当我们在网络中的层之间执行激活功能时,我们可以使用调节向量来影响该激活如何发生,并且可以在逐层的基础上不同地使用该调节向量。我们选择使用来自 Conditional PixelCNN 和 Wavenet 的条件门控乘法激活函数。据我们所知,这是首次将全局调节应用于 GAN 框架。

详细架构:

发电机:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鉴别器:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结果:

在这里,我们展示了一系列从我们的三个流派中挑选出来的照片。

鲜花:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

风景:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

肖像:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由于我们的鉴别器的性质,我们能够使用它来选择我们的生成器产生的“好”图像。具体来说,由于我们的鉴别器能够对图像的真实性进行分类和判断,我们可以为特定的流派产生一组生成器图像,并从这些图像中要求鉴别器选择它 1)以高置信度分类为该流派并且 2)还判断具有高真实性值的图像。这就是产生上述图像的方法。

我们也可以在一个静态噪声向量下,通过改变给定的条件信息,来观察发生器是如何区分流派的。所有流派的这些图片都可以在附录中看到。这里要注意的是,虽然生成器已经明确地学会了产生不同种类的流派,但是它们并没有像我们所希望的那样被区分开来。此外,所产生的艺术作品的质量也有很大的差异,其中一些所产生的图像比其他图像好得多,即使对于给定的噪声矢量,在特定的流派中也能更真实地表现出来。我们认为这种现象的原因再次是,我们的模型学习“真实”与“虚假”艺术的表现比在给定的“流派”中创作艺术要容易得多。通过增加预训练和全局调节,我们在一定程度上缓解了这个问题,但显然没有完全解决它。我们面临的另一个挑战是,一些艺术流派比其他流派复杂得多,或者差异更大。特别是,这导致我们的生成器在生成某些类型(如神话画和动物画)时性能不佳,尽管我们假设给定更大的数据集,我们的模型也应该能够生成这些类型的真实示例。

虽然我们在这个项目中的主要动机是生成图像,但我们也能够通过将它作为分类器来评估我们的鉴别器的有效性。我们在训练集和大小为训练集 1/20 的测试集上测量了我们的分类能力,并在我们的测试集中获得了 90%以上的分类准确率。我们注意到,虽然我们的分类精度并不严格,但它优于在相同数据集上执行的其他分类指标,Wai Ren Tan 在 2016 年在大约相同的数据集上获得了 74.14%的分类精度(我们的数据集只是略有不同,因为我们在不同的时间点抓取了 wikiart 网站)(Tan 2016)。

未来工作:

我们项目中的一个实质性限制因素是我们对计算资源的访问。使用只有 2GB 内存的 GPU,我们被迫坚持生成 64x64 像素的图像,因为任何更高的分辨率都迫使我们的批量大小和模型的维数显著减少。当将我们的 64x64 模型生成的图像与我们最初的 32x32 模型进行比较时,我们注意到我们的模型有了显著的改进,因此我们假设,通过增加计算资源,允许缩放到 128x128 图像,在我们当前的架构下,图像的质量也会显著提高。在考虑将艺术生成的问题扩展到更大的图像尺寸(如 256x256)时,我们认为受 StackGAN 影响的架构使用我们提出的两个 GAN 模型可能会非常有效。我们认为这种架构可以提供的一个实质性好处是,我们的阶段 I GAN 可以作为一种强制区分不同类型的方式,因此阶段 II GAN 在阶段 I 图像上进行调节时,将更适合于克服我们在模型中看到的困难,其中具有不同调节信息的噪声向量映射到相似的图像。我们还注意到,这种两层 GAN 模型可以通过额外的调节信息来改进,具体来说,我们建议,除了我们的模型中描述的流派调节设置之外,可以在第二阶段鉴别器和第二阶段发生器的输入中使用另一个具有风格信息的热矢量,然后可以进一步划分所生成的艺术组合,例如文艺复兴肖像与抽象肖像。

结论:

虽然我们不认为我们的模型“解决”了艺术生成的问题,但我们希望能够对使用 GANs 生成新艺术的方式提供见解。具体来说,我们已经表明,在正确的条件度量下,wasserstein 风格的 GANs 能够以一种有用的方式考虑条件信息,用于“硬”图像分布。此外,我们已经证明了全局调节是对 GAN 框架的有效补充。我们还指出了我们为特定流派选择的鉴别图像,以验证这一研究路线,因为很明显,我们的生成器在为特定流派制作小说艺术方面做得非常出色。

作品引用:

Arjovsky、Martin、Soumith Chintala 和 Léon Bottou。“瓦瑟斯坦·甘” arXiv 预印本 arXiv:1701.07875 (2017)。

伊恩·古德菲勒等着《生成性对抗性网络》神经信息处理系统的进展。2014.

改善瓦瑟斯坦甘斯的训练。 arXiv 预印本 arXiv:1704.00028 (2017)。

奥登纳,奥古斯塔斯,克里斯多佛·奥拉和黄邦贤·史伦斯。“使用辅助分类器的条件图像合成.” arXiv 预印本 arXiv:1610.09585 (2016)。

谭,,等。《不是一根管子:一个用于美术绘画分类的深度卷积网络》图像处理(ICIP),2016 年 IEEE 国际会议上。IEEE,2016。

《Wavenet:原始音频的生成模型》 CoRR abs/1609.03499 (2016)。

用像素 cnn 解码器生成有条件的图像。神经信息处理系统的进展。2016.

维基亚特。https://www.wikiart.org/

张,韩,等。〈堆叠式甘:利用堆叠式生成对抗网络进行文字到照片的真实感图像合成〉。 arXiv 预印本 arXiv:1612.03242 (2016)。

附录:

用相同的噪声矢量但不同的调节矢量产生的图像。

摘要:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

动物绘画:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

城市景观:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比喻:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

花卉画:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

风俗画:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

风景:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

玛丽娜:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

神话绘画:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

裸体画:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

肖像:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

宗教绘画:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

静物:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

象征性绘画:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

去神秘化的甘——他们到底学到了什么?

原文:https://towardsdatascience.com/gans-demystified-what-the-hell-do-they-learn-142575c878db?source=collection_archive---------7-----------------------

可视化生成性对抗网络

本文是研究论文“ 甘剖析:可视化和理解生成性对抗网络 ”的总结。本文对 GANs 的内部表示提供了极好的见解,并对以下问题给出了严密的回答。

甘一家到底在学什么?我特别指的是发电机。我们都见过 GANs 产生的惊人结果,在某些情况下几乎与人类的工作无法区分。但是它们是如何表示学到的知识的仍然是一个谜。他们只是简单地学习像素模式并合成他们所看到的吗?还是他们真的从训练数据中捕捉到了复杂的关系?

本文试图解释 gan 的表示,并举例说明可视化和调试它们的技术。它使用两个阶段来实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Overview of the work. Watch the demo video here

解剖

剖析的目的是识别生成器中层的输出所代表的对象类。G 中的一个特殊单位代表树吗?

一些术语:

**单元:**发电机的各通道特性图 G
r:一层发电机的输出

基于 Bau 等人(2017),过滤器的特征图给出了对象类分割的良好近似。对于我们感兴趣的每个对象类,我们首先计算生成的图像中该类的分割掩码。我们使用下面的公式对单元 u 的特征图进行上采样和阈值处理。然后,我们取这个阈值化的、上采样的特征图和该类的分段掩码之间的 IOU。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

表示交集, 表示并集。 s_c(x) 表示图像 x 中特定类别 c 的分割掩模。上面也提到了计算特定单元和类的阈值的公式。简而言之,上面的公式给出了一个度量一个单位 u 多少代表 c 类。你可以在论文中读到更多关于阈值公式背后的直觉。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,通过对每个类 c 获得的值的这些分数进行排序,对单元所代表的概念(对象类)进行排序

**TLDR;**解剖允许你发现与一个对象类最匹配的单元。但这并不一定意味着他们要对产生它们负责。

干涉;干预

干预旨在发现一组单元是否导致对象类别 c。这是通过打开和关闭单元并观察对生成的图像 g 的影响来完成的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

r: 张量输出(激活图)来自生成图像 G 中某一特定层的 G
U:
单位集 P: 像素

消融是指通过将 U 中的单元设置为 0 来关闭它们。另一方面,插入强制 U 中的单位等于 k ,每类常数 a。通过取引起 c 的单元的特征图的平均值来计算 c 类的 k。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面的公式给出了多少单位 U 负责生成 c 类的度量。该度量被命名为平均因果效应 (ACE) 。这里, s_c(x) 表示像素 p 处的图像 x 中的 c 类分割图。因此,基本上,插入和切除对 G 中 c 类分割图的因果影响之间的差异。

但是我们怎么知道如何选择最优的单位 U 呢?很难进行彻底的搜索来选择最佳组合。这是通过使用一个巧妙的目标函数,并将这项工作外包给梯度下降来完成的。

我们将 U 设为整个单元集,但是用参数向量α对它们进行加权。随机梯度下降然后被用于最大化目标函数(ACE)和最小化最优集合中的单元数量(通过使用阿尔法的 L2 正则化项)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

L2 regularisation term is added to minimize number of units in the optimal set

下图显示了消融导致树木的单元如何成功地从生成的图像中移除树木。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Ablating units to remove trees

简单地说,结果

**层间差异:**根据结果,第一层与井对象类别不匹配。这具有直观的意义,因为早期的图层通常表示原始特征。中间层有许多匹配语义对象和对象部分的单元。结束层匹配局部像素模式,如材料、边缘和颜色。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**GAN 架构之间的差异:**本文还通过检查单元讨论了不同架构在内部表示方面的比较。

**经由插入的上下文关系:**该论文还描述了通过强制单元将特征插入到生成的图像的特定位置。一个有趣的观察是,像门这样的物体只能被插入到视觉上有意义的特定位置(如窗户附近的建筑、砖块)。这表明 GANS 实际上捕捉了物体之间的关系,而不仅仅是像素模式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图说明了对象类的生成是如何高度依赖于本地上下文的。插入的实际效果因发生的地点而异。

诊断 GANs

通过使用干预技术,我们可以研究生成的图像中错误/不期望的部分和伪影的原因。通过手动注释和去除引起的单元,GAN 的结果可以得到相当大的改善。下图说明了消融伪影产生单元如何产生可见结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用这个框架,您可以手工定制和影响 GAN 的结果。增强或减少某些对象类的存在(在一定程度上)是相对简单的。

最后的想法

这篇论文很好地试图揭开 GANs 的神秘面纱,这是一个迄今为止相对未被探索的话题。他们的框架使研究人员和实践者能够更好地调试、改进和理解他们的模型。

所讨论的调试方法大多基于人工监督。然而,我相信本文中介绍的推理和技术可以潜在地用于开发更自动化的技术来改进 GANs(本文讨论了一种自动识别工件单元的技术)。

**演职员表:**取自论文的想法、公式和图像。

参考

【甘剖析:可视化与理解生成性对抗网络

项目官网(附 Github 代码、演示视频、幻灯片等)

交互式甘绘制工具

甘斯·恩罗斯

原文:https://towardsdatascience.com/gans-n-roses-c6652d513260?source=collection_archive---------1-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“本文假设读者熟悉神经网络和 Tensorflow 的使用。如果没有,我们会要求您阅读迈克尔·尼尔森关于深度学习的 这篇 文章,并熟悉如何使用tensor flow。”

想象有一天,我们有了一个神经网络,它可以看电影并生成自己的电影,或者听歌并创作新的电影。这个网络会从所见所闻中学习,而不需要你明确地告诉它。这种让神经网络学习的方式被称为无监督学习。

在过去的三年里,事实上以无人监督的方式训练的 GANs(生成对抗网络)获得了很多关注,现在被认为是人工智能领域最热门的话题之一。这是《脸书 AI》的导演 Yann LeCun 对他们的看法:

生成对抗网络是近十年来机器学习中最有趣的思想。

gan 是做梦的神经网络,在观看其中一些图像后生成图像。嗯,这个可以用来做什么?为什么这很重要?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Generated bedroom images. Source: https://arxiv.org/abs/1511.06434v2

直到最近,神经网络(特别是卷积神经网络)只擅长分类任务,例如在猫和狗或者飞机和汽车之间进行分类。但是现在它们可以用来生成猫或狗的图片(尽管它们看起来很奇怪),这告诉我们它们已经学会了特征。这向我们表明,他们能够理解一个物体本身的特征。

GANs 的这种非凡能力可用于许多令人惊叹的应用,例如:

  • 给定文本描述生成图像。查看链接:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Text to Image. Source: https://arxiv.org/pdf/1605.05396v2.pdf

[## 2016 年深度学习的主要进展- Tryolabs 博客

过去几年,深度学习一直是机器学习社区的核心话题,2016 年并不是…

tryolabs.com](https://tryolabs.com/blog/2016/12/06/major-advancements-deep-learning-2016/)

  • 图像到图像的翻译:

这可能是迄今为止 GAN 最酷的应用。图像到图像转换可用于从草图生成逼真的图像,将白天拍摄的照片转换为夜间图像,甚至将灰度图像转换为彩色图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image to Image Translation. Source: https://phillipi.github.io/pix2pix/

请点击此链接了解更多详情:

[## 基于条件对抗网络的图像到图像翻译

基于条件对抗网络的图像到图像翻译

phillipi.github.io](https://phillipi.github.io/pix2pix/)

了解了 GAN 的能力之后,让我们一起登上宣传列车,实现一个简单的 GAN 来生成玫瑰的图像。好吧,等等,但是为什么是玫瑰?

"我们不想用一个故事来烦你,但只能说这篇文章是在听了枪炮玫瑰乐队的一首歌后得到的灵感(现在知道标题了吧??)

让我们看看甘到底是什么:

在我们开始构建 GAN 之前,让我们了解它是如何工作的。生成式对抗网络包含两个神经网络:鉴别器和生成器。鉴别器是卷积神经网络(不知道 CNN 是什么?看看这篇精彩的文章)学习区分真实和虚假的图片。真实的图像来自数据库,假的来自生成器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Discriminator

该生成器的工作方式类似于反向运行的 CNN,它将一个随机数向量作为输入,并在输出端生成一个图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Generator

我们稍后将讨论生成器和鉴别器的工作和实现,但现在让我们看一个著名的例子来解释 GANs(解释大量借用了滥用生成性对抗网络来制作 8 位像素艺术)。

让我们把生产者想象成一个伪造者,把鉴别者想象成一个必须辨别真假货币的警察。首先,让我们保证伪造者和警察的工作都一样糟糕。因此,伪造者首先产生一些随机的看起来有噪声的图像,因为它对货币的样子一无所知。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Noisy Image by the Counterfeiter

现在,警察被训练来区分伪造者制造的这些假图像和真货币。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Train the Police Officer

伪造者现在知道其图像被归类为假的,并且警察正在寻找货币中的一些明显特征(例如颜色和图案)。伪造者现在知道了这些特征,并产生了具有这些特征的货币(在这种情况下是图像)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Training the Counterfeiter

现在,再次向警官展示来自数据集的真实货币和来自伪造者的新的改进(希望如此)图像,并要求对它们进行分类。因此,官员将会学到真实图像的更多特征(如货币上的脸)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Train the Police with the new fake images

伪造者再次学习这些特征并产生更好看的假图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Train the counterfeiter again

伪造者和警察之间的这种持续的斗争一直持续到伪造者制造出看起来和真的一模一样的图像,而警察无法对它们进行分类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Real or Fake?

GANs N ’ Roses 在 Tensorflow 上的实现:

让我们使用 tensorflow,不使用任何其他东西(除了 pillow),构建一个简单的 DCGAN(深度卷积生成对抗网络)。

但是什么是 DCGAN 呢?

DCGAN 是 vanilla GAN 的修改版本,以解决 vanilla GAN 的一些困难,例如:使假图像看起来视觉上令人愉悦,在训练过程中提高稳定性,以便生成器不会通过重复输出符合鉴别器正在寻找的数据分布的图像来发现鉴别器中的缺陷,但与真实图像相差甚远。

这是我们试图构建的鉴别器架构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Discriminator Architecture

可以看出,它接受一个图像作为输入,并输出一个 logit (1 表示真类,0 表示假类)。

接下来,我们有生成器架构,它由 conv 转置层组成,接受一组随机数作为输入,并在输出端生成图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Generator Architecture

DCGANs 提出的修改直接取自这份文件:

  • 用步长卷积(鉴别器)和分数步长卷积(生成器)替换任何池层。
  • 在发生器和鉴别器中使用 batchnorm
  • 为更深层次的架构移除完全连接的隐藏层。
  • 在生成器中对所有层使用 ReLU 激活,但输出层除外,它使用 Tanh。
  • 在所有层的鉴别器中使用 LeakyReLU 激活。

让我们从收集玫瑰的图像开始。一个简单的方法是在谷歌上搜索玫瑰图片,并通过使用 ImageSpark 等 chrome 插件下载搜索结果中的所有图片。

我们已经收集了 67 张图片(越多越好),可在这里找到。将这些图像提取到以下目录中:

/数据集/玫瑰花。

可以通过在 Github 上克隆这个 repo 来获得代码和数据集。

[## 纳雷斯 1318/甘斯玫瑰

GANs_N_Roses -使用深度卷积生成敌对网络,通过 tensorflow 生成玫瑰图像。

github.com](https://github.com/Naresh1318/GANs_N_Roses)

现在我们有了图像,下一步是预处理这些图像,将它们重新整形为 64 * 64,并将它们缩放到-1 到 1 之间的值。

我们将首先写出稍后可用于构建卷积、卷积转置、密集全连接层和 LeakyReLU 激活的函数(因为它在 Tensorflow 上尚不可用)。

Function to implement convolutional layer

我们使用get_variable()而不是通常的Variable()在 tensorflow 上创建一个变量,以便稍后在不同的函数调用之间共享权重和偏差。查看这篇的帖子,了解更多关于共享变量的信息。

Function to implement convolution transpose

Function to implement dense fully connected layer

Leaky ReLU

下一步是构建生成器和鉴别器。先从我们的主角,发电机说起。我们需要构建的生成器架构如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Again, the Generator Architecture we’re trying to implement

generator()函数构建了一个发电机(dah!)使用上图中的架构。已满足 DCGAN 要求,例如移除所有完全连接的层、仅在生成器中使用 ReLU 以及使用批量标准化。

类似地,鉴别器可以容易地构造如下:

所需的架构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The Discriminator architecture

我们再次避免了密集的全连接层,在鉴别器处使用了泄漏 ReLU 和批量标准化。

现在是有趣的部分,训练这些网络:

鉴别器和发生器的损失函数如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Discriminator loss (This must have a negative sign)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Generator loss

其中 x 代表实像,z 是输入发生器的噪声矢量。

我们将把随机输入传递给生成器,zin 的形状将是[BATCH_SIZE,Z_DIM],生成器现在应该在其输出中给出 BATCH_SIZE 数量的假图像。生成器输出的大小现在将是[BATCH_SIZE,IMAGE_SIZE,IMAGE_SIZE,3]。这是损失函数中的 G(z)项。

D(x)是接受真实图像或虚假图像的鉴别器,并被训练来区分它们。为了在真实图像上训练鉴别器,我们将把真实图像批次传递给 D(x ),并将目标设置为 1。类似地,为了在假图像(来自生成器)上训练它,我们将使用 D(G(z))将生成器输出连接到鉴别器输入。

鉴频器的损耗通过 tensorflow 的内置函数实现:

接下来,我们需要训练生成器,使 D(G(z))将输出一个 1,也就是说,我们将固定鉴别器上的权重,并仅支持生成器权重,以便鉴别器总是输出一个 1。

因此,发电机的损失函数为:

接下来,我们将收集鉴别器和生成器的所有权重(稍后需要仅训练生成器或鉴别器):

我们使用 tensorflow 的 AdamOptimizer 来学习权重。下一步是将需要修改的权重分别传递给鉴别器和生成器优化器。

最后一步是运行会话,并将所需的图像批次传递给优化器。我们将训练模型 30000 次迭代,并定期显示鉴别器和发电机损耗。

为了使超参数的调整更容易,并保存每次运行的结果,我们实现了 form_results 函数并创建了一个名为mission_control.py的文件。

使用mission_control.py文件可以修改网络的所有超级参数,稍后运行main.py文件将自动为每次运行创建文件夹,并保存 tensorboard 文件和生成的图像。

我们可以通过打开 tensorboard 并将其指向在每个运行文件夹下创建的 Tensorboard 目录来查看训练期间每次迭代的鉴别器和发电机损耗(查看 GitHub 链接以了解更多详细信息)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Variation of Generator loss during training

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Variation of Discriminator loss during training

从这些图中可以看出,鉴别器和发生器损耗在训练阶段不断增加和减少,表明发生器和鉴别器都试图超越彼此。

该代码还保存每次运行生成的图像,其中一些图像如下所示:

在第 0 次迭代时:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第 100 次迭代:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第 1000 次迭代:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图像在第 30000 次迭代时被过度拟合:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

训练阶段生成的图像如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这些图像是有希望的,但是在大约 1000 次迭代之后,可以看到生成器只是从训练数据集中再现图像。我们可以使用更大的数据集,并针对更少的迭代次数对其进行训练,以减少过度拟合。

gan 易于实施,但如果没有正确的超参数和网络架构,则难以训练。我们写这篇文章的主要目的是帮助人们开始使用生成网络。

别人在干嘛:

感谢您阅读这篇相当长的中型文章。如果你觉得它有帮助,请考虑分享它。如对本文有任何疑问,请随时联系我们。

GANS —第二部分:用于生成图像的深度卷积 GANS

原文:https://towardsdatascience.com/gans-part2-dcgans-deep-convolution-gans-for-generating-images-c5d3c7c3510e?source=collection_archive---------1-----------------------

深度卷积 GAN 或 DCGAN 在生成器和鉴别器中使用卷积层。在的论文中首次探讨了 DCGAN 架构。还需要使用批量标准化来训练卷积网络。

发电机

第一层是一个完全连接的层,它被重新塑造成一个又深又窄的层,有点像原始 DCGAN 纸中的 4x4x1024。然后我们使用批处理规范化和一个泄漏的 ReLU 激活。接下来是转置卷积,通常情况下,您会将前一层的深度减半,宽度和高度加倍。同样,我们使用批处理规范化和泄漏 ReLU。对于这些层中的每一层,一般的方案是卷积>批范数>泄漏 ReLU。

您继续像这样堆叠层,直到您获得形状为 32x32x3 的最终转置卷积层。下面是最初的 DCGAN 论文中使用的结构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

def conv_transpose_layer(prev_layer, filter, kernel_size, strides, is_training, alpha):
    x = tf.layers.conv2d_transpose(prev_layer, filter, kernel_size, strides, 'same')
    x = tf.layers.batch_normalization(x, training=is_training)
    x = tf.maximum(x, alpha*x)
    return xdef generator(z, output_dim, reuse=False, alpha=0.2, training=True):
    with tf.variable_scope('generator', reuse=reuse):

        # First fully connected layer
        x1 = tf.layers.dense(z, 4*4*512)
        # Reshape it to start the convolutional stack
        x1 = tf.reshape(x1, (-1, 4, 4, 512))
        x1 = tf.layers.batch_normalization(x1, training=training)
        x1 = tf.maximum(x1, alpha*x1)
        # 4x4x512 now x2 = conv_transpose_layer(x1, 256, 5, 2, training, alpha)
        # 8x8x256 now

        x3 = conv_transpose_layer(x2, 128, 5, 2, training, alpha)
        # 16x16x128 now

        # Output layer, 32x32x3
        logits = tf.layers.conv2d_transpose(x3, output_dim, 5, 2, 'same')
        # 32x32x3 now

        out = tf.tanh(logits)
        return out

鉴别器

鉴别器基本上只是一个卷积分类器。请注意,在 DCGAN 论文中,他们仅使用步长卷积层进行了所有下采样,没有使用最大池层。

在除第一卷积和输出层之外的每一层上使用tf.layers.batch_normalization进行批量归一化。同样,每一层应该看起来像卷积>批处理规范>泄漏 ReLU。

def conv_layer(prev_layer, filters, is_training, alpha, batch_norm=True):
    conv_layer = tf.layers.conv2d(prev_layer, filters, 5, 2, 'same', use_bias=False, activation=None)
    if batch_norm:
        conv_layer = tf.layers.batch_normalization(conv_layer, training=is_training)
    conv_layer = tf.maximum(conv_layer, alpha*conv_layer)
    return conv_layerdef discriminator(x, reuse=False, alpha=0.2):
    with tf.variable_scope('discriminator', reuse=reuse):
        # Input layer is 32x32x3
        x1 = conv_layer(x, 64, True, alpha, False)
        # 16x16x64 x2 = conv_layer(x1, 128, True, alpha, True)
        # 8x8x128 x3 = conv_layer(x2, 256, True, alpha, True)
        # 4x4x256 flat = tf.reshape(x3, (-1, 4*4*256)) logits = tf.layers.dense(flat, 1)
        out = tf.sigmoid(logits)

        return out, logits

gan 对超参数非常敏感。为了找到最佳的超参数,进行了大量的实验,以使发生器和鉴别器不会相互干扰。

real_size = (32,32,3)
z_size = 100
learning_rate = 0.0002
batch_size = 128
epochs = 25
alpha = 0.2
beta1 = 0.5

https://github . com/mchablani/deep-learning/blob/master/DCGAN-svhn/DCGAN _ exercises . ipynb

学分:来自课堂讲稿:https://classroom.udacity.com/nanodegrees/nd101/syllabus

甘斯全神贯注

原文:https://towardsdatascience.com/gans-with-attention-3b90802921af?source=collection_archive---------4-----------------------

一点背景:

一个生成对抗网络 (GAN)串联着两个网络:一个生成器和一个鉴别器。解释 GANs 的流行例子涉及假币。生成器试图创建一个看起来像美钞的图像,鉴别器试图将伪钞与真美钞的图像区分开来。在训练了两个网络之后,生成器已经学会创建看起来非常像一美元钞票的图像,而鉴别器已经学会可靠地将这些伪造图像与真美元区分开来。

不幸的是……

这是一个一次性过程。生产者制造假货,鉴别者试图识别假货,然后根据他们的表现给他们打分。没有反馈,没有进一步调整;该伪造图像被丢弃。

在递归神经网络中使用的类似方法是演员-评论家模型。通常只有在表演结束时才能得到“分数”的演员,反而会在表演过程中被评论家“打分”。评论家学会预测哪些动作会影响最终得分,演员学会执行影响最终得分的动作,通过评论家的即时评分。这还是一个一次性的过程。作为对批评的回应,这位演员无法“再次拍摄那个场景”。

那么,修改呢?

另一个比喻,来描述一个更好的方法:一个作者产生他们的美元图像(或文本块,或动作串……)并将其发送给编辑。然后编辑器中发现错误的地方标记该美元图像,并将其发送回作者。作者将他们的注意力集中在那些错误上,并改正它们,将新草稿发回给编辑……重复这个循环,直到编辑发现没有错误。作者网络学会了用注意力过滤器拍摄图像,然后将变化应用到高亮显示的区域。编辑器学习获取图像及其目标,并突出显示应该改变的区域。

这种作者-编辑模型支持有价值的新行为。一旦作者被训练根据编辑的标记改编图像,一个也可以通过选择他们 想要改变区域 来纠正作者。这种用户输入可以引导不同的作者将他们的注意力集中在图像的不同区域上。用户可以选择图像的一些区域,并应用“冬至春作者”的注意力,而选择同一图像的其他区域,以应用“现实生活中的赤壁作者”。每个作者根据自己的关注进行修改。你可以做编辑。**

不止如此……

这位编辑受过突出错误的训练。因此,如果作者-编辑模型是在文本上训练的,那么编辑有一个直接的应用:纠正人类所写的错误!(比如语法上……)

此外,作者-编辑网络可以与人类实时合作。例如,你可以画一种动物——狐狸?—它被传递给编辑,编辑试图识别应该修改的区域*。例如,编辑可能会在你的 fox-drawing 上突出显示线条可以平滑的区域,或者建议在哪里改变它们的位置、比例和整体纹理。*

编辑也会犯错!它可能会认为你在画一只,不恰当地突出了几个区域。您可以查看这些高亮区域,替换 编辑的高亮。然后这些区域可以交给作者,作者将网络的注意力集中在区域上,并进行修改。你审核作者的更新稿,可以自己修改。然后,发给编辑……重复,直到你满意为止。**

选择备选方案:

这种作者-编辑模式也使得人们可以借助 多个 作者和编辑共同创作 *内容。作者的注意力可以应用于不同的领域,也可以应用于同一领域。如果每个作者都活跃在不同的**区域,(就像之前提到的《冬去春来》和《赤壁的真实生活》的作者),他们的草稿可以合并。但是,当作者的关注区域 重叠时,作者各自提供一个替代方案,而你可以 选择应用哪个替代方案*。****

(你可能有三个绘画风格的作者,并突出显示图像的相同区域,以查看他们每个人对该区域的建议**。然后,你可以用不透明滤镜将每个作者的作品应用到你高亮区域的不同部分。在它们之间选择,零敲碎打!)**

拥有多个编辑器提供了类似的好处——每个编辑器突出显示它认为应该修改的区域,然后你在他们建议的突出显示中进行选择。你也可以阻止编辑修改你想保留的东西!

修订历史培训:

作者-编辑 GAN 不同于现有的 GAN 架构,它通过在由编辑器生成的注意力域上训练作者,并通过多次修改来产生最终输出。在这种方式下,作者-编辑模型类似于具有注意力的递归神经网络:修订历史可以像 RNN 的行动历史一样“展开”,并且每个修订将注意力集中在新的相关领域。不过,修订不同于循环——RNN 描述的是一个序列,就像在迷宫中选择路径一样,而作者-编辑修订描述的是一种平衡,一个编者停止突出修改的落脚点。递归的 NNs 不能包含修订,但修订可以包含递归:作者可以在迷宫中写出选择的序列,它写了又写,直到编辑满意为止。:]

遗传算法+神经网络=两全其美

原文:https://towardsdatascience.com/gas-and-nns-6a41f1e8146d?source=collection_archive---------2-----------------------

神经网络与遗传算法相结合确实可以加速解决某个问题的学习过程。

所有的大公司现在都在使用神经网络(NNs)遗传算法(GAs) 来帮助他们的 NNs 更好更有效地学习。在本文中,我将讨论耦合 NNs 和 GAs 的利弊,并分享我自己的一些想法。我还将描述这个过程中使用的基本算法。

我偶尔会写这些有些简短但内容丰富的文章,帮助你了解更多关于 AI 和机器学习的知识。你可以在 twitter 上关注我的或者在这里关注我的来了解我的最新文章。你也可以在 twitter 上问我问题,或者在这里发表评论。

希望这篇文章能教会你一些新的东西!我们开始吧。

遗传算法在神经网络之前非常流行。因为,NNs 需要大量数据,而 GAs 不需要。遗传算法主要用于模拟环境和群体中实体的行为。它们主要用于学习我们知道答案的问题的解决途径。

气体今天仍然被使用,但是机器学习(ML)已经大部分接管。

它们是如何工作的

根据维基百科气体:

在计算机科学和运筹学中,遗传算法 ( GA )是一种元启发式算法,受自然选择过程的启发,属于进化算法(EA)的更大类别。遗传算法通常用于通过依赖诸如变异、交叉和选择之类的生物启发算子来生成优化和搜索问题的高质量解决方案。

如果这仍然不能理解,那么我确信丹尼尔·希夫曼的气体播放列表会有所帮助。它帮助我了解了天然气的工作原理,总体而言,希夫曼的视频非常好。尽管我建议加快速度。

NNs 的问题是

NNs 帮我们解决了这么多问题。但是他们仍然有一个大问题。超参数!这些是唯一不能学习的价值观…直到现在。

注意:超参数是在给定问题的情况下,神经网络正确执行所需的值。

我们可以使用 GAs 来学习神经网络的最佳超参数! 这绝对牛逼!

现在,我们不必担心“知道正确的超参数”,因为它们可以使用 g a 来学习。同样,我们也可以用它来学习神经网络的参数(权重)。

因为在遗传算法中,实体学习特定问题的最佳基因组,这里,每个神经网络的基因组将是其超参数集。

解决问题

要解决超参数问题,我们需要做以下工作:

  • 创建几个神经网络的群体。
  • 将随机(在一个范围内)超参数分配给所有神经网络。
  • 对一定数量的迭代执行以下操作:
  1. 同时或逐个训练所有神经网络。
  2. 在他们都完成培训后,计算他们的培训成本。
  3. 基于其成本计算每个神经网络的“适合度”(它在该迭代中做得有多好)。健身将被用来增加神经网络“繁殖”的机会适应度越高,它繁殖的机会就越大。然而,最好的神经网络将具有最低的成本。如果我们将那个神经网络的适应度设置为等于它的成本,那么最好的神经网络将有最少的机会被选择用于繁殖。我们可以把适应度指定为成本的倒数。因此,最低的成本,会有最高的适合度。有很多方法可以为适应度赋予更好的值,但这超出了本文的范围。
  4. 找出群体中的最大适应度(步骤 5 所必需的,根据步骤 5 的实现可以忽略)。
  5. 根据适合度的概率系统选择 2 个神经网络。我省略了对此的解释,因为这对某些人来说可能太复杂了。这里有一个视频,解释这个话题。
  6. 交叉两个神经网络的基因。这将创建一个“子”NN。这个神经网络应该具有第一个神经网络的一些性质和第二个神经网络的一些性质。这个过程也有许多不同的实现。
  7. 突变孩子的基因。变异是为了在遗传算法中保持一定的随机性。
  8. 对群体中的 NNs 数量执行步骤 5-7。您应该将创建的“子代”存储在新的总体中,并将新的总体赋给包含旧总体的变量。

注意:你应该创建一个你想学习其参数的神经网络类。然后,该群体最初应该包含同一个 NN 类的几个实例。还有,上面写的东西,都可以从希夫曼的播放列表中了解到。

执行上述所有步骤,在最新一代结束时,您的算法将找到包含具有最佳超参数的神经网络的群体。它将是种群中最健康的神经网络。下图试图解释这一过程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Iterative process of fining hyper-parameters using GAs

另一个问题

这是一个学习你的超参数的好方法,但它也有自己的问题。最突出的两个问题是计算资源和时间。

同时或一个接一个地多次训练许多神经网络需要大量的时间和计算资源。这就限制了这种解决方案的实施,只有那些愿意投入资金和购买大量处理能力的人才能使用。

这也是它被大公司广泛使用的原因。

一个例子

不到一年前,OpenAIs Dota 2 bot 击败了一名职业 Dota 2 选手(文章YouTube 视频)。玩家花了几年时间学习和掌握的东西,机器人只花了几个星期。在我在 YouTube 上看到的一个视频中,一名 OpenAI 工程师解释了他们如何训练机器人。

他们用遗传算法来训练他们的机器人。因为他们有必要的处理能力,他们能够同时运行 Dota 2 的多个实例,每个实例都有一个玩游戏的机器人实例。他们花了两周的时间来教机器人这个过程。

想象一下这需要多大的处理能力。

结论

在我看来,天然气是很好的教导神经网络,但他们不会是我的第一选择。相反,我将尝试寻找更好的方法来学习神经网络的超参数。如果有的话,那就是。

然而,如果将来我获得了大量的处理能力,我一定会尝试这种方法。

就这样,希望你学到了新的东西!

如果你觉得这篇文章有帮助,请鼓掌。在 Twitter 上关注我这里关注我的最新帖子。如果你有任何问题,你可以发微博给我,或者通过评论让我知道。我很乐意回答这些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值