在Google Colab上完成Coursera的作业

最近开始学国立高等经济学院的机器学习课程,和之前 Andrew Ng 的课程不同的是,这个课程大量用编程而不是视频来带动教学。而且这些程序用了行业通用的数据库,并且从零开始训练,而不是只训练一个epoch就加载由老师训练好的模型进行验证。

因此,这个课程的机器学习过程,在CPU上经常需要数小时完成,更别谈用Coursera自己在线的那个服务了(不太稳定)。

Google为数据分析及机器学习学生准备了一个平台:Colab。这个平台最棒的地方是完全免费的提供了一个GPU供使用,但限制在12个小时内。
但是这个平台并不能直接用来跑Coursera的课程。虽然两个平台用的都是Jupyter notebook格式的文件,但Goolge限制了对文件系统和目录的访问,最直接的表现就是,Colab一次只能运行一个notebook,运行下一个的时候,未必是同一个环境。

那么有没有hack的办法呢?我成功了。

TL;DR: 你需要把所有需要的Notebook合并成一个,并且用Google的API把一些依赖库上传到环境中。

以第一个专项课程第四周的第一个作业为例。

通过分析,完成这个作业需要用到两个notebook,其中一个用来下载测试数据,另一个才是课程代码。
课程还需要数个*.py的库,因此,我做了一个初始化环境的notebook
使用时,将这个初始化脚本下载资源作业本身的notebook用nbmerge命令合并成一个notebook并传到自己的Google Drive。(这个命令没有的话用pip安装)
然后,因为文件目录结构发生了变化,download_utils.py 里面的文件位置需要改变,简单来说就是去掉所有的“../“。(链接的这份我已经改好了)
用初始化脚本第一行代码上传requirements文件和所有依赖的py库。注意,这个requirements文件我在官方的基础上做了修改,删除了tensorflow的版本要求,因为直接用Colab环境的版本适配GPU最方便。
完成以上工作以后,顺着notebook安装依赖库,下载训练数据,然后就可以开始写作业了。

但这个方案还是有些不完美的地方:

  • notebook里面的图片会显示不出来,因为根本就没上传。你可以从官方Github手动下载过去,我则是直接在Coursera上面打印一份PDF对照看。
  • 下载和训练的进度会显示不出来。这个我不知道是什么问题,网上搜不到多少类似案例。我用PyCharm跑notebook也有这个问题,但直接在浏览器中则不会。我倒是不纠结这个问题,因为Google的网速和GPU的训练速度快啊。

比起用CPU训练几个小时,现在几分钟就可以出结果,实在是太棒了!

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版的训练效果差不多。

一次司空见惯的利益输送

前年的时候,公司CEO的司机给我们推荐了一个项目,是一个住宅项目。

待今年项目销售的时候,这位司机以成本价认购了其中一套,根据我们最后销售的情况,大约比市价便宜一百万。

然而故事还没完,我刚才说他认购吧,其实他根本没付钱,定金都没付,但是已经装修好了并且住进去了。

现在项目清算,清算报告会有个注脚写着应收某某xxx万购房款。

然而我觉得可能过两年也不会有人记得这个事情了。

满嘴跑火车和领导力

之前经常怼的,业务部门的一个老总,原来也就比我高半级吧,今天被突然宣布接管一个副总裁的工作,成为了我的领导。

副总裁这一年半年业绩不好,也做了一些我觉得值得商榷的决策,然而人是不错的,对下属十分信任、友善,做事也有基本的原则。他被调离的更主要原因,可能是跟总裁的关系有裂缝。

这个业务部门的老总,很早做过房屋中介的,典型的中介性格:嘴非常能说,满嘴跑火车,然而事后可以证实或完成的一半不到。但他是一路跟总裁走过来的。

副总裁本来有很多机会可以压制这个老总,因为这个老总在业务上有很多不规矩的地方,我经常要曝这些事情出来,有一些被副总裁压着没发。主要原因,我估计还是因为副总裁更希望业务得到发展,因此允许犯一些“小错误”,也把一些暂时还没爆发的风险隐藏在他控制的范围中。但结果却变成了养虎为患。

似乎在这样一个变化的时代,满嘴跑火车,而不再考虑话语的责任(accountability),是领导力的一部分。是的,川普,我说的是你。

我已经不知道应该怎样在这样一个时代生存。

中国的房地产市场的腐烂根基

本文翻译自:http://www.economist.com/news/leaders/21708730-real-estate-elsewhere-its-economy-chinas-short-term-fixes-mask-deep-structural

就在一年前,政策制定者对中国股市暴跌竭嘶底里。现在则是中国的房地产市场泡沫造成国内外的担忧。由于房地产行业占了世界第二大经济体需求的约四分之一,市场崩溃的影响将远远超出一国的范围。事实上,就目前而言,中国也许可以避免灾难性的崩溃(见文章)。但它没有迹象表明能够实施必要的根本改革,以纠正价格剧烈波动的市场失调,从长远来看是危险的。

乐观地认为危机可以避免的一个原因是风险已经被识别。由于许多大城市的房地产价格在上海,深圳和南京每年飙升30%以上,甚至中央银行的首席经济学家也警告说存在“泡沫”。中国最富有的人(和房地产开发商)王建林上个月则更进一步,称之为“历史上最大的泡沫”。外国银行经济学家,当地经纪人和国家的智库都同意这个观点。今年的抵押贷款急剧上升,恐惧已经加剧。7月和8月,它们占新增银行贷款的近80%。

政府清楚地竖起了警告标志:在过去两个星期,房地产购买的政策在大约二十个城市收紧,表明中央政府推动地方政府遏制他们的房价过度上涨。紧缩措施(通常提高支付的购买价格的百分比作为现金首付)在过去是有效的。尽管最近的抵押贷款空前繁荣,中国家庭负债仍然较低。今年早些时候当影子银行开始借贷给购房者以支付预付款时,监管机构很快就禁止了这种做法——这与去年当当局对配资炒股无动于衷使股市泡沫般膨胀有所不同。

房价的上涨也强烈地提醒我们,中国对房地产的需求仍然如此疯狂。惠誉,一家评级机构,计算得出中国从现在到2030年每年将需要约8亿平方米的新房,以满足人们搬到城市和购买更好的家园的需求,这大约是新加坡的国土面积。这实际上不及中国最近每年完成的十亿平方米,但仍然是非凡的。

然而,由于政府的政策,所有这些住宅的市场仍然受到严重扭曲。最根本的是,政府不能按人们想要住的地方进行开发。因为它想要控制大城市的增长,所以限制了城市土地的供给。稀缺推高价格;建筑商和购房者都会付出奇高的溢价。较小的城市仍有大量未售出的房屋。当前的上涨没有对它产生多大影响。匹配供给通常不是主要考虑因素:因为土地销售是地方政府收入的重要来源。也不可能每个人都住在他们想要的地方,因为居留许可(户籍制度)仍然可以用来阻挡外地人。

家是我的巢

进一步被扭曲的是压抑的金融体系,限制了投资机会。外汇管制阻碍了国外的合法投资;国有银行保持极低的存款利率;股市已经是过山车。因此,物业看起来是一个非常有吸引力的标的吸引着过剩的现金。调查表明,现在中国的那些买房者中,也许五分之一是投资者而不是自住者。核心业务瘫痪的国有企业,抗拒破产和改革,转向物业发展,弥补利润。

在许多中国城市的限购措施对解决这些结构性问题毫无作用。一点都不奇怪。它们是共产党顽固困境的核心:如何在不增加突然“硬着陆”的风险的情况下保持经济的快速增长,如何让市场蓬勃发展,同时保持党的控制。至少在房地产方面,解决方案就在眼前。中国必须坚持开放金融体系,最重要的是彻底改革土地政策。如果没有,房地产的狂热会一次次扫荡大城市,这些繁荣将有一天以毁灭而结束。

 

佳兆业的违约对民间资金的影响

华尔街日报也开始关注佳兆业对汇丰的违约事件,按说,即使佳兆业所有在售的物业被禁止交易,以它自身的流动资金也不会偿还不了这一笔贷款。当然它欠的不止这一笔贷款,只不过其他的还没有到期。当然没有到期也不意味着不用偿还,银行大可以以经营情况发生重大恶化的理由催贷并且冻结资金,何况还有交叉违约条款呢。

我不想在此解释佳兆业为什么被查封,已经有很多人分析过了。我想说的是佳兆业的违约对民间资金的影响,尤其是“潮汕帮”的影响。这个问题,似乎还没有多少人公开讨论过,而我也是昨天去深圳从跟客户的谈话中发现了这个问题。
如果你熟悉广东的民间借贷的话,你一定会知道潮汕人这样一个团结的集体。他们似乎有几十亿的资金可以随时调动,圈子内仅凭信用不需要抵押,并且资金成本低廉。 
但是,佳兆业出事之后,情况似乎有了变化。以前数个牛逼哄哄的投资公司、基金都开始出现了资金短缺的情况,仅仅是时间巧合吗?我觉得没有那么简单,因为佳兆业的实际控制人郭英成,就是普宁出生的。 据客户透露,潮汕这个圈子出现了约80亿的资金缺口。

不管是不是真的跟佳兆业有关,此次“潮汕帮”违约,影响力可以比作是民间版的刚性兑付的打破。对于习惯“放数”的人们来说,未来可能得考虑其他的投资产品。也许私募基金能够乘势发展起来呢。

中国特色的P2P

鄙公司最近开了P2P网站,因为Twitter已经说过很多次了所以也不想在这里放出网站名字或者地址,免得有做广告推荐的嫌疑。可能也是因为公司开了P2P的原因,最近发现身边很多朋友有一些疑惑,到底P2P安不安全,能不能投。也许是孕妇效应,但不妨碍我集中一次解答了吧。
毫无意外的,P2P并不是中国首创的东西,但是中国的P2P跟美国的区别大到可以当作是两个事物。 

首先是一些常识性的知识:

  1. P2P是个人对个人的借款,平台理论上只是中介。实际上由于各种原因(下面会提到),中国的P2P平台很难作为纯粹的中介存在。更多时候,平台需要对挂在其网站上的项目承担兑付的责任,这个责任并不是法律上的。
  2. 中国的法律并不允许非金融机构对个人或公司借款,又对金融机构进行牌照管理。使得民间融资只能通过个人对个人的方式,也仅有这种受到法律保护。宜信,作为最早最大规模的P2P公司,就是通过其控制人唐宁对外发放贷款。

中国跟美国P2P的最大区别在哪里?
从实际运作的情况来看,中国的P2P平台不仅仅起到中介的功能,在借款人无力偿还贷款时,多由(关联)第三方甚至是平台代为偿还投资人。这种P2P格局的成因一般认为有几点:

  1. 中国信用体系不健全,无法客观的对借款人的信用进行评价,而平台作为推荐方,被认为应对借款的风险负有识别和判断的责任。代偿就是这种责任的后果。
  2. 中国的(心理)无风险报酬率被各种投资渠道推高,无担保的有风险产品不会获得投资人认可。
  3. 平台为维护自身信誉需要,主动承担代偿责任。

那么P2P是如何代偿的呢?

  1. 直接由平台回购债权,平台事后向借款人追索。
  2. 融资担保公司事前已对债权进行担保,因此由融资担保公司代偿。

其实不论路径如何,最后一般都是由平台自己买单。我在融资担保公司工作过,一般的融资担保公司的代偿能力其实很有限。而且大部分担保P2P的融资担保公司根本就是平台的关联公司。

经过上面的讲解,相信你对P2P的风险成因及控制有了基本的认识。大致是这样:

  1. P2P不是存款,(从全行业来看)是一种风险较大的债权投资。按照人民银行的规定,P2P不允许在宣传材料中承诺保本保息。但实际上几乎所有的P2P都会表达这个意思,只不过可能换了说法。
  2. P2P主要的风险来自于借款人的信用风险,在目前的行业实际情况中,绝大多数借款人是在银行无法向其提供贷款才转而从P2P借款,因为P2P的利息成本远远高于银行。换句话来说,他们是银行“不要的”客户。
  3. 如果你一定要投P2P还希望尽量控制风险,那么平台越正规,后台越大越安全,比如陆金所。目前国内还没有跟陆金所处在同一个级别的。

你说陆金所起投金额太高,收益才6~8,隔壁那家1块钱起投收益还高很多,他也有担保也有回购等等。
 请问你真的认真看过这篇文章吗?

支付宝的银行梦

中国对金融机构的准入相当严格,但越来越多的地区性商业银行开始全国化转型,也许不久支付宝也能进入金融市场。

支付宝与传统银行相比有很多优势。
网络交易,没有实体网点:因此边际成本几乎为零,不像工农中建四大银行,每年仅全国网点的装修就是天文数字。
快捷:用过支付宝的人应该都有这样一个印象,从支付宝转钱到你的银行账户几乎是实时的。为何会这样?因为支付宝公司在全国主要的银行都有开户,你在支付宝网站上申请将2000元转入你建设银行的卡,其实支付宝公司是从他们建行的账户上转账过去,由于是同行转账,做到实时划转一点都不奇怪。

快捷也有快捷的坏处,为了满足客户提款需要,需要在各个银行存入大量备付金。大量资金被迫闲置。
但是人民银行的一个改革计划却可能解决这个问题——第二代金融平台。
超级网银是二代金融平台的一个产品,但真正要取代现有大额、小额支付系统的部分却计划要到2012年才会完整上线。在二代金融平台的支持下,与现有分散接入不同,每个金融机构都只是总行一级接入人民银行,并且它也为各清算机构留下了接入的空间。想想看,现有的银行也许要进行大幅度的系统改造才能接入第二代金融平台,但它简直就是为支付宝这样的机构量身定做的。用人民银行统一的备付金取代各大银行十几个甚至几十个账户管理,资产运营方面减轻了不少压力。

要进入零售市场,支付宝必须和银联,VISA,MASTERCARD等发卡机构合作,发行自己的实物卡片。这个实物卡当然可以在ATM取款,刷卡消费,甚至可以是贷记卡,如信用卡等。这样就完成从线上消费到线下消费的完整覆盖。然后由于超级网银的推出,支付宝可以凭借自己的技术优势开发出大统一的网银,让其他银行的网银黯然失色。

贷款方面,支付宝可以和淘宝商家合作,发展小额贷款,创业贷款等业务。但若要真正的开展大额贷款,建立专门的贷款部门是必不可少的。这些业务员恐怕要全国到处飞吧。

企业金融方面,支付宝虽然是短板,但也不是没有进入的机会。汇票的电子化将是未来的趋势,技术方面支付宝自然是胜券在握,由电子化汇票带来的授信业务,显然又能促进贷款。

对于这样一个全新的金融模式,我感到非常期待。