Keras 2.1.3+ 的一个改变带来的问题

今天被一个奇怪的事情折腾了一天:课程作业无法得到应有的结果,本应得到高于90%的准确率的模型,训练出来只有40%。
幸好在讨论区找到了答案:Keras在2.1.3版后,对BatchNormalization这个层的功能做了修改。但是这个修改并没有体现在Keras自己的文档中, 只在GitHub的问题区有零星的讨论。

不少人对这个改变有不同的看法,主要两种观点及其验证可以见以下三篇文章:1 2 3

总结来说,其实在2.1.2及之前,BN这个层是有bug的,这个bug就是:如果该层被设为trainable=False,实际在训练中,这个层还是会更新mean和variance的值,并且这些参数会更新到测试阶段使用。

到了2.1.3及以后,这个bug被消灭了,但是对很多做transfer learning的人来说,却有新的问题出现了。因为做transfer learning时,一般会导入Inception、ResNet等已经训练好的模型作为底层模型。这些底层模型的训练集和我们用来训练的数据肯定是有区别的,因此会导致BN这一层的mean和variance不正确。

如果是训练和测试的时候都一样错就罢了,起码模型的结果是一致的。Keras另一个参数trainning的默认值决定了模型在训练的时候,是以mini-batch的mean和variance数据来训练的,但并不会更新到模型中,因此测试用的mean和variance仍然是导入的模型的原始数据。

上面这种设计带来的结果就是,在某些情况下,同样的模型同样的数据,训练和测试的loss或者acc会差很远。因为是同样的数据,所以根本不是over-fitting的问题(虽然看起来很像)。这也正是我遇到的问题。

针对这个问题,解决办法有两个思路:

  1. 彻底锁死BN层的参数,即使训练阶段也不更新,可以通过设置training=False来实现。但是我初步测试了一下这个方法的训练效果不好。
  2. 把BN层设为可训练。我初步测试了一下跟2.1.2版的训练效果差不多。

中国债市谜团:违约率为何没上升?

WSJ开始定向引爆债市这个大地雷。

经济下行的情况下,以往的用时间换空间的操作不再可行。雷一定会爆的。

资管新规中的理财产品以净值计价就是为了让中小投资者承担信用风险。

今年以来,中国债券的违约数额似乎出现了大幅增加。2018年迄今,中国国内债券市场共有13家债券发行人发生违约,合计违约公司债规模为人民币202亿元(约合31亿美元),较上年同期增加41%,2017年同期发生违约的发行人为11家。

不过,在未偿债券总体量合4万亿美元的中国公司债市场上,违约率依然只有0.08%。据穆迪投资者服务公司(Moody’s Investors Service Inc.)驻香港的分析师锺汶权(Ivan Chung)称,在不发生大规模金融危机的情况下,全球的公司债违约率通常在2%左右。

Source: 中国债市谜团:违约率为何没上升? – 华尔街日报

美国参议院将对推翻中兴通讯和解协议进行表决

属于我的1美元还回来😂

美国共和党参议院领袖罕见地向总统特朗普(Donald Trump)发难,定于本周发起表决,这次表决料将推翻白宫令中国通讯企业中兴通讯股份有限公司(ZTE Corp., 简称:中兴通讯)恢复业务的交易。

美国商务部长罗斯(Wilbur Ross)周一晚间在国会山进行游说,反对这一动议。但两党议员说,已就在《国防授权法案》(National Defense Authorization Act, 简称NDAA)加入一条修正案达成一致,该修正案将禁止中兴通讯从美国供应商手中购买零部件。商务部在4月中旬发出了不得向中兴出口零部件的禁令,以此作为该公司违反和解协议的惩罚;中兴通讯曾就违反制裁规定向朝鲜和伊朗销售商品与美国政府达成和解。

Source: 美国参议院将对推翻中兴通讯和解协议进行表决 – 华尔街日报

资管“水龙头”拧紧之后

还在问优势何在?银行理财本来就是个监管夹缝中产生的怪胎,全部灭掉也不奇怪。

银行更在乎的是,资管子公司能否享受与基金公司同等的政策条件。多位银行资管人士指出,在认购门槛、资金投向、估值方法这些关键问题上,如果银行理财要遵守比资管新规更严格的规定,银行理财的优势何在?更退一步说,即使仅按资管新规要求,银行理财的优势已经荡然无存。

Source: 资管“水龙头”拧紧之后_财新周刊频道_财新网

中文词向量

我已经把用人民日报全文数据学习的词向量上传到了GitHub,也附上了相关的代码。但是考虑到版权的原因,并没有附上人民日报全文数据。

各位可以拿来做NLP分析或者做自己的词聚类分析。