Posts

  • Python TypeHint

    什么是type hint

    众所周知,Python是一门动态类型的语言,每个变量的类型都是可以变化的,这种特性给我们提供了足够的灵活性,让我们免于处理各种prototyping,而能把注意力 集中在具体的功能上。然而动态类型也有它的问题,除了不能依赖类型信息做优化以外,可读性也会显著下降。为了解决可读性的问题,python3.5之后引入了 type hint, 用来给变量标记“类型提示”。需要注意的是,虽然可以给变量标记类型,但这个类型毕竟只是“提示”,python解释器并不会帮你检查这个变量究竟是不是符合标记的类型。 Python依旧是动态类型的。

  • Dropout的小插曲

    在Dropout的论文中,在evaluation过程中,由于不执行dropout,为了防止scale变大,要把权重乘以p(权重不被drop的概率),这样就可以把输出值当成所有带dropout的输出的平均值,相当于做了ensemble。

  • SlotWeight

    今天看到一篇文章Continual Learning with Deep Generative Replay提到多任务学习时,如果按顺序一个任务一个任务学的话,已经学会的任务会很快被忘记。联想到人学习东西的方式,似乎是有不同的“区块”,在应用不同技能的时候调用不同区块的记忆,而不是把所有的技能混在一起的。那么我们训练神经网络的时候能不能也引入这样的机制呢?让神经网络学习一些不同的规律,或者拥有多个记忆,并且根据面对的数据来选择调用哪段记忆。

  • DilatedRNN

    WaveNet中使用了Dilated Convolution,通过调节卷积核中的空洞的比例(dilation),这种网络可以在不使用pooling和stride的前提下对不同尺度的信息进行处理。

  • 一道常见的面试题

    原题

    有一千瓶水,其中有一瓶有剧毒,但是无法通过物理方法把它们区分开,只能用老鼠去尝试。老鼠喝了毒药后一个小时内会死亡,只有一个小时的时间,最少需要多少只老鼠才能把有毒的水区分开来?

  • 对抗学习和消除因子暴露

    之前搞深度学习量化选股的时候碰到过一个坑,训练样本中市值因子尤其有效,会导致模型特别偏好小市值的股票,而市值因子在2017年的行情中并没有优势,那么模型在2017年的行情中就会无端增加风险。

  • Word2Vec及Stock2Vec

    Word2Vec

    Word2Vec是一个非常简单的模型,其实只有一个隐层,所以都不能算是“深度”学习。但是由于网上的教程都特别侧重于数学描述而对实现方案一带而过,加上Google的C语言版本的Word2Vec可读性好差(不知是可读性差还是我代码阅读力太差),好几次想研究研究这玩意儿都放弃了。最近痛定思痛下定决心,终于把论文和源码读下来了。

  • 模仿tensorflow实现符号运算及自动求导

    Tensorflow用了好久了,它的符号运算和自动求导功能都非常有意思,实现起来好像也不难,只是很简单的链式法则而已。终于有空下来稍微搞了一下。相关代码在github上。

  • 两道面试题

    刚才在网上看到两道面试题,稍微思考了一下,觉得还挺好玩的,分享一下解题思路,不一定对。

    第一题

    主持人设计了一个游戏,有三个参赛者参加:主持人秘密地随机从0-100选择一个数N,三个人依次报一个数(三个人中每个人都能听到另外两个人报的数,他们报的数不能重复)。报完之后主持人公开他选择的那个数N,三名参赛者中报的数中与N最接近那个人能得到100万奖金,求问:你愿意当第几个报数的参赛者,你的策略是什么?

  • 安装GPU版Tensorflow

    搞了台HP Gen8 MicroServer,150W的功率,双核CPU,配了8GB内存,就开始跑深度学习模型。随便写了个程序,训练一次epoch要一个半小时,整个心都凉了!最近都在淘宝边逛显卡边流口水,买是肯定买不起了。

    三年前买了台笔记本,当时是为了打游戏,配了个GeForce 650M,到NVIDIA管网查了一下,Computation Capability刚好等于3,达到了Tensorflow的最低标准,泪奔!

  • 过拟合自编码压缩器处理MNIST分类问题

    上周在用Tensorflow搞MNIST,用了好几层CNN,各种normalization什么的加上去,准确率就是怎么也达不到TF官网说的99.2%,最高也就98.6%左右的样子。可能是官网上对测试集的区分和Kaggle不一样,导致有一定的误差。

  • 写前端

    上次公司有同事让我帮他用xls做表格,表格的内容比较简单,就是把各品种期货的量价关系画出图来,但是重复工作量很大,一共四十来个品种,每个品种每年一张图,多的可能有十几年的数据。我跟他说这样太复杂了,要不我做个网页版的给你吧,只要做个模板,就能把各种数据直接套进去。他同意了。

  • Haskell爬虫框架 - UseLess

    用Haskell写了个爬虫框架,支持open-closed table任务调度,目前还是单线程的,包含HTML解析和标签筛选。用起来还挺方便的。跑了一下CPU占用率有点高,可能是HTML解析的效率太低。目前的做法是把整个HTML解析成标签树,但其实有点浪费,因为很多分支都不会被用到。考虑可以修改成惰性解析,当需要检索某个标签的时候才解析相应的标签。这里有待改进。

    源码在Github上,也写了相应的Wiki

  • Monad之我见

    Monad是Haskell一个比较受争议的特性,看到网上黑它的人真不少,也不乏自称非常熟悉Haskell和其他语言的“大神”,他们称Haskell过分强调纯函数和Monad是一种偏执,是多此一举。但是,我是力挺Monad的。

  • 不到150行代码实现Haskell版本的Markdown解析器

    转到Github查看源代码

    前言

    看到网上有人说Haskell非常适合做解析,它的Parsec库又特别好用。在Real World Haskell上学习了用Parsec解析csv和json,感觉真不是一般的灵活和强大。网上也有人用parsec解析LRC歌词的,感觉就有点大材小用了。于是昨天在想,为什么不写个Markdown的解析器呢!

    事实证明Parsec确实强大,像加粗、段落、台头这样的上下文无关的标签几乎分分钟就搞定了,50行代码就搞定了。原本以为处理列表和表格会特别困难,要用到State之类的,确实也花了点时间,但后来发现其实也非常简单,配合上css,就能让格式变得非常好看。后续工作我就没做下去。

    当然,代码高亮和数学公式我都没做,要做这两个就不只是Markdown语法那么简单了,而且代码高亮可以借助JS库完成。

  • 终于弄明白Monad是如何封装Context的了

    Monad是函数式编程中一个饱受争议的特性。一方面,它确实非常强大,给了函数式编程很多灵活性,也允许像Haskell这样的语言拥有封装副作用的机制;另一方面,它的古怪性质导致很多学习者始终抓不住它的精髓。

    Monad配合do语句可以让Haskell代码像命令式编程一样具有顺序结构。然而最牛逼的还是它封装Context的能力,就好像IO、STRef和Random那样。但是我始终没有明白它是怎么做到的,查了很多文档也没有把这个问题搞明白。刚才失眠突然想到了:原来封装的机制比想象的复杂,do语句使这个抽象的过程看起来很简单!

  • 论列表操作的效率问题

    之前用Python写了个量化回测平台,最一开始直接用list储存行情信息,然后考虑到回测周期长了以后大量行情会比较占用内存,帅帅就从list继承出了一个FIFOList,指定一个长度,在超过这个长度后,每次append都会把第一个元素删掉,以保证内存占用保持在较小规模。一开始没觉得有什么,后来跑了一下,5分钟的K线,四五个月的行情回测花了十几秒,但并没有涉及特别复杂的算法。

  • 新的开始

    花了一个晚上加一个上午的时间,尝试了各种blog程序,想找个清爽易用的平台,重新开始写博客。试过gitblog,可惜作者似乎不再维护了。最后到Hexo,下载和编译还花了挺长时间,但感觉非常棒,尤其是都是静态网页,可以在github上部署。

    打算在这里写一些编程方面的心得,可能还有些数学、物理方面的思索。不期望有人看,就当是笔记了。

subscribe via RSS