TensorFlow 2.0入坑必备之No.1: 积极模式(Eager Execution), David 9的挖坑实战#1

标题虽然是“入坑”,但David认为这个坑并不深,不变的规律是:人类的工具总是向简单易用发展(并且不妨碍强大的功能)。

TensorFlow 2.0最大更新(我认为没有之一)的积极模式(Eager Execution)同样如此。

也许你曾经喜欢PyTorch即拿即用即求导的简单快捷:

# Create tensors.
x = torch.tensor(1., requires_grad=True)
w = torch.tensor(2., requires_grad=True)
b = torch.tensor(3., requires_grad=True)

# Build a computational graph.
y = w * x + b    # y = 2 * x + 3

# Compute gradients.
y.backward()

# Print out the gradients.
print(x.grad)    # x.grad = 2 
print(w.grad)    # w.grad = 1 
print(b.grad)    # b.grad = 1 
# 来自:https://github.com/yunjey/pytorch-tutorial

不过你现在不需要羡慕了,如果你用TensorFlow 2.0,默认的积极模式(Eager Execution)和PyTorch如出一辙(你只需使用tensorflow.contrib.eager模块):

import tensorflow.contrib.eager as tfe
def f_cubed(x):
    return x**3
grad = tfe.gradients_function(f_cubed)
grad(3.)[0].numpy()

值得强调的是,从TensorFlow 2.0开始,这种Eager Execution模式是默认的!也就是说,曾经我们在TensorFlow 1.0中的第一步构建流图graph,第二步让流图真正“流”起来的模式现在默认不适用了。对于TensorFlow 1.0, 要随时打印一个变量值几乎不可能(因为一个Tensor只是一个内部变量):

但是TensorFlow 2.0中,debug变得非常简单, 继续阅读TensorFlow 2.0入坑必备之No.1: 积极模式(Eager Execution), David 9的挖坑实战#1

谈谈谷歌的免训练网络(早熟模型)及其前景,David9的神经网络观察,WANN(Weight Agnostic Neural Networks)

如在某方面过于早熟,是否可能阻碍更高级的智能发展? — David 9

对于早熟(precocial)动物我们并不陌生,一匹小马在出生几小时以内就可以自我站立走路:

自然选择使得这种物种特别偏爱这样一个技能:“跑”,甚至在出生后不需要怎么训练就能快速学会。那么神经网络是否也可以实现免训练(早熟模型)呢?谷歌这篇论文给出的答案是肯定的。

更有意思的是,这篇权重不可知网络WANN(Weight Agnostic Neural Networks)类似的也适用于小马走路这种简单的行为任务,包括模拟直立前进赛车小游戏

来自:https://arxiv.org/abs/1906.04358

与现有神经网络迥然不同,整个WANN网络从最简单的几条连接开始构造,仅通过拓扑搜索而不通过权重训练(权重通过设定超参数,由此,从一个分布中随机拿到),为了最小化权重的影响力,  挑选了那些对多数权重都表现较好的拓扑作为候选拓扑(有些遗传算法的思想在里面):

来自:https://arxiv.org/abs/1906.04358

谷歌开了个好头因为常人太在乎权重训练了,把注意力移到拓扑搜索上来,也许有新的发展。

但是,神经网络拓扑的搜索空间较大, 继续阅读谈谈谷歌的免训练网络(早熟模型)及其前景,David9的神经网络观察,WANN(Weight Agnostic Neural Networks)

【独家】深入了解自监督学习(self-supervised learning),David 9的番外篇

作为一个物种,人类智能(human intelligence)正在向通用智能(general intelligence)的方向发展,不是吗?— David 9

最近看到Yann LeCun 的播客访谈,聊到人类智能,LeCun认为人类智能是非常specific的(具体的而远非“通用智能”):

来自访谈:https://www.youtube.com/watch?v=SGSOCuByo24&t=3545s

是的,为了在大自然长期生存下来,我们的祖先更关心与生存密切相关的东西。我们的视觉有盲区行为有太多模式,我们的内在“世界模型”也不“通用”(general)。

人类经常以为自己能应对世界的复杂变化,这只是他们一厢情愿的世界观,事实上,多数情况他们只能勉强应对(在自己构建的“世界模型”的舒适区)。

但这,足以支撑普通人的正常生存(即使他们用自以为用完整通用的智能应对一切), 原始人主要任务是擅长打猎就行(其他的复杂因素如天气可以用“神”来补充世界观):

远古人攻击野猪图

工业时代为了生存,人类甚至可能沦为机器的奴隶:

卓别林:《摩登时代》

所以,

与其说人类是通用智能,不如说我们是基于生存的智能 — David 9

David同意人类的局限是明显的,但借助外部工具如AI,人类正在变得越来越general,看到很多看不到的东西,这种人与机器的“互补智能”是未来不可估量的(有机会下次展开)拉回到主题: 

人类智能本身, 其实也有一个秘密武器:”自监督”学习

那么究竟什么是自监督?

首先,自监督有监督学习!哪怕目前缺少有标注的samples,他也会想办法加上一些假的(pseudo)label ,或者用其他间接的方式得到比较可信的label。其次, 继续阅读【独家】深入了解自监督学习(self-supervised learning),David 9的番外篇