一种能够学习家谱关系的简单神经网络
血缘一共同拥有12种关系:
有1个英国家庭以及1个意大利家庭,每一个家庭有12个人。
各种家庭关系都是可用三元数组表示。即( Agent / Relation / Patient ) 结构:
- (colin has-father james)
- (colin has-mother victoria)
- (james has-wife victoria) 能够由上述关系推导得到
该网络由5层结构组成,如图1所看到的
图1
- 网络底层左右两边各有12个神经元。
- 第1层左側神经元输入 Agent 向量,每次仅仅有一个为1,如000100000000。
- 第1层右側神经元输入 Relation 向量。每次也仅仅有一个为1。
- 第2层左側神经元用来序列化 Agent 向量,右側神经元用来序列化 Relation 向量。
- 第3层用以学习 Agent 与 Relation 的关系,预測出 Patient。
- 第4层解析出 Patient 向量。
- 第5层是预測出的实际 Patient。其每次的激活值可能不仅仅一个。
网络学到了什么?
以序列化输入 Agent 的 6 个神经元为例。如图2.
- 1号神经元对不同国籍的输入非常敏感。能够进行区分。
- 2号神经元对每次输入 Agent 所属的辈分(Generation)非常敏感。
- 6号神经元对每次输入 Agent 所属的家庭非常敏感。
图2
关于 概念(Concepts) 的两种理论
- 特征理论(The Feature Theory)
因此概念就能够用特征的向量来表示。
- 结构主义理论(The Structuralist Theory)
因此概念能够用关系图模型表达。
Hinton 觉得 *Both sides are wrong* ,由于
Softmax 输出函数
均方误差有下面缺陷
- 假设目标是1而如今的实际输出是0.00000001。那么返回给神经元的梯度差点儿为0.
- 强制指定所属各类概率就会剥夺网络的学习能力。
Softmax作为逻辑回归的推广,能够非常好解决这些问题。
构造公式
梯度公式
代价函数依旧使用相互熵
dC / dy 的陡峭正好抵消了 dy / dz 的平坦。
相互熵
梯度
Theano相应函数
x,y,b = T.dvectors('x','y','b')
W = T.dmatrix('W')
y = T.nnet.softmax(T.dot(W,x) + b)