2017-04-16

关于确定性

seq2seq的intuition某种程度上来说就是把两个vector拟合出一个映射关系.

或者说任何向量化的计算抽象了说都是拟合这种映射关系.

所不同的是像machine translation的recurrent neural network/long short term memory.
提供的是一种position相关的调整策略.

因为从语言侧面来说,翻译的一个思路是两种语言之间语义指向的别称之间的关联关系.
也就是所谓的基本字词的转换关系.
而语法只不过是一种arrangement的方式.

对于表意来说,怎么放置其实更多的是一种约定俗成的关系.

所以简化一下就是两种语言的意指之间的对照关系.

于是,通过LSTM等具有位置调整功能的组件把两种语言关联到一种通用的"语法"结构下面,也就很自然而然了.

RNN系某种意义上来说,对于向量本身就像一种elementary operation.
简单地对向量的唯独做类似行交换的reprojection.

它跟普通的matrix transform的思路区别在于,这种纬度切换面向的是单个的向量本身.
而不是一个操作apply到所有向量的同一纬度.

所以,这个的intuition更像是一种pattern extraction.

CNN也类似.
如果把RNN像CNN一样排练,或者把CNN的convolution layer看出某种形式长度的LSTM的话.
pooling+rectifier也就类似于某种位置转换来达到某种pattern的align.

考虑回两组向量的拟合映射问题.
或者说去掉拟合连两个字.

给定任意两组向量和之间的一个映射关系,定义这个映射关系为一个operator.

于是,一个例子,比如整数加法,或者所谓的group.
1+1 = 2 就是[1,1] -> [2]
2+3 = 5 就是[2,3] -> [5]

那么同样地,可以定义另外一种operator.
使得
1+1 = 9 也就是[1,1] -> [9]
之类的.

从group theory的角度来说,只是某些约束符合不符合/满足不满足/定义没定义的问题.

这里的一个点在于.
数学或者说某种确定性关系,某种程度上来说是对向量两边的映射关系的一个特定子集描述.

或者说是某种特定的分组方式.

于是问题就在于,对于这个特解的所谓合理/相容/不矛盾是包含了这个group的某种constrain在内的.

简单说,就是排除了"已知的反例"的.

比如对于square操作.
\sqrt 2和\sqrt -2的区别.

后者可以说是在前者的一个新的reproduction或者说一个新的group子集划分.

这里想说的是什么呢?

所谓的确定性或者说科学性合理性在于,可以给出A->B的一个自洽的结果.
也就是,这时候有一种足够描述能力的子集划分,去概括这些映射关系.

那么,当如果出现一个是地A->B不自洽了的情况.
就像out of vocabulary或者某些算法的bad case的时候,就出现的需要对这个"映射关系"/理论做修补的时候.

就像物理学的发展.

那么到底什么是确定性呢.
或者说理论上存在么.

halting problem的思路在于,如果一个UTM能够simulate自身的话.
这个simulation是non stop的递归过程.
于是反过来说不存在一个UTM可以描述所有的东西.

这里隐含的一个假设就是,如果可以simulate,那么一定是会或者说必要halt的.
反过来说,如果把这个条件去掉,那么就存在一个可以simulate除自身之外的任意事件的UTM.

也就是说,把这组映射关系里去掉某些之后还是可以自洽的.

于是,反过来说,只要出现任意一个不在自洽体系里的case的话,这个体系的确定性就不存在.
或者说至少需要重构.

因此,一个体系所能描述的"确定性"只是针对已知或者已经发生的A->B的一个特例划分.
它的有效性最多仅仅限于"过去".

而对于"未来",这个是undefined的.



2017-04-15

PINCode的意义

考虑下支付pin code的意义.

如果没有pin code而协议走的是对称加密的话.
那么理论上只要能够对process/device有一定的访问权限的话,reveal key应该不是什么问题.

而https的话,机制上也有可能通过root certificate的方式让加密透明化.

剩下私有的非对称加密方式.

原则上来说,因为对于client的发出的信息来说,只有key owner能够decrypt.
所以貌似没什么问题.

但这里有一点是,key owner其实并不能verified client.
因为它verify的是基于public key的一个signature.
只是某种integrity的校验,而对于消息的发起者身份也是没有任何信息的.

于是,理论上,在client和owner之间就存在一个中间人的机会.
这样的话,同样可以使得加密透明化.

而如果需要对client和owner做一个第三方认证,也就是类似https方式的话,同样地不能避免中间人攻击.

所以,实际上来说,这里的问题一个消息的integrity.
另一个是authorization.

而integrity是建立在authorization之上的.
因为不管你的integrity check多么完善.
如果不能确认消息的制造者是期望中的一样的话,也是没有意义的.

那么怎么做authorization呢?

或者直观的一个例子就是,如果确认一个communication channel另一端的你是你.
而不是一条狗.

然后看pin code.

假设pin code没有leak的话.
或者说pin code是只有client和service provider之间才知道的信息的话.
换句话说,就是没有第三方知道这个信息的话,也就没有authorization的问题.

因为能通过这个pin code关联起来的除了自身就是对方.

本质上来说,这里依赖的是某种形式two party private information.

所以它的问题在于,如果leak了呢.

考虑什么时候会leak.

一个是在首次交换的时候.
或者说存在一个唯一一次交换信息过程的时候.

比如设定pin code让对方知道/确认的形式.

这个时候因为没有一个private information,所以理论上是存在leak的机会的.

那么存在不存在不需要交换,但双方都能agree的一个形式呢?

理论上是可以存在的.

一个最简单的方式就是考虑类似btc的方式.
双方随机生产一个code,然后encrypt一个公共信息,然后尝试decrypt这个信息.
如果能够成功还原,那么就因为这双方有了一个agreement.

这样的话,剩下的问题就是如何提高这种碰撞/配对的成功概率.

理论上可以把生产算法narrow到跟时间设备信息等已知条件习惯的某种半确定性算法.
比如最简单的通过当前通信的ip:port+limited random field去尝试配对.

当然,这里同样存在中间人的问题.
因为一开始谁也不知道谁是谁.

所以同样存在一个开始negotiate的时候被中间人的机会.

这样的话,倒不如回退回直接交换pin code的方式.

再扩展一下考虑用户名密码的模式的话也是类似.

本质上来说,这里需要的是一个private held的information.
用来做unique identity和mutual information.

于是,这里再回头看https的话,其实算不错的方案了.

通过https交换最初的pin code.
不存储的话,以后即使信道被compromise.
只要这个code保存地好/没有leak,那大致上还是能够做身份确认的.


聊聊卡布里尼

最近看了部片叫卡布里尼,算是可能这段时间来比较有意思的一部电影. 故事也不算复杂,就是一个意大利修女去美国传教,建立慈善性质医院的故事. 某种程度上来说,也很一般的西方普世价值主旋律. 但是如果换一套叙事手法,比如共产国际的社会主义革命建立无产阶级广厦千万间的角度来看的话,也不是...