2014年总结

最近还是在继续做DNN,针对的问题还是广告CTR预估。DNN model理论方面的资料实在太少,看到的更多是一些pre-trianing这些的,而且大部分都是做图像,文本,语音的。所以干脆只关注如何求解,也就是如何优化DNN,调研了一些SGD方面的paper,重点看了Tong zhang的paper,不过我觉得针对非凸优化,那些方法不一定可行,先继续研究研究再说吧。
中间参加了一次面试,有些总结:1,我之前从不关注feature的,觉得那没啥意思没什么技术含量,经过面试才发现,对方还是很关注feature engineering的,特征的人工选择,如何选择,选了哪些作为feature等等。这个以后要注意,多玩数据,研究研究feature。2,对于model,我最开始学习机器学习时是很看重这个的,但是把李航那本统计学习方法的看了几遍,公式也推了一遍。以及后来的prml(这本书可真不好懂,最近在和几个小伙伴一起读第二遍)和ESL,也都看了。后来发现实际工业界用的也就那几种而已,完全没有必要个个都搞的很深(但是最好要都熟悉或者了解),而且我有时候觉得搞模型没啥意思啊,来个新数据,加个圈,就提出了一个新model,对我个人来说,不是很感兴趣。但是面试时会被问到不同的model的优缺点,为什么好为什么差,之前没仔细考虑过,以后要考虑清楚为什么DNN要比LR或者GBDT效果更好。估计要找不少paper,又会有很多时间是在做无用功,我心理上已经做好了准备。3,我之前看的很多的优化算法也有问到,owlqn这个我当时靠它把优化算法给串了一遍,结果面试时有些忘记说了,还是因为没有经常用到吧。以后要经常总结,多回顾。其实我觉得优化算法才是工业界可能做的最多的事情,model不会轻易改,也不好改,太难了;但是优化算法是可以尝试实验的,有数据有计算资源,肯定可以玩玩。
最近也看了google的FTRL,也说说自己的想法吧:一连串的paper读下来,发现牛人也是要站在巨人的肩膀上的,没有什么是突兀出现的,这也给我了一些启发,我一直想做好非凸优化这件事,那我就需要把相关paper串起来找灵感,而不是拍脑袋!另外,google的这篇paper也验证了工业界易算法不易做model的情况。
可能要关注的如下:
首先,LR,GBDT,DNN这三者在广告ctr预估上的优越性对比,模型的优缺点,为什么好为什么坏,这个是重点要掌握的,切记;
其次,FTRL,sgd,L-BFGS,owlqn,cdn,conjugate gradient descent,重点关注SGD以及各种变形。
最后,模型上的LR,GBDT,dnn,navie bayesian,maximum entropy,knn,SVM,LDA以及阿里的MLR,百度的DANOVA,实在太多了,只重点关注几个,比如LDA,现在我几乎不用了,但是也怕面试会再被问到。
以后打算重点关注large scale machine learning,这个信息量很大,绝对不是只扯model.加油!

附上之前关于deep learning的想法:

我的疑问:为什么大家都在讲deep learning?deep learning是什么?不就是多层的神经网络吗?多层神经网络不是早就有了吗?怎么突然大家像是找到了宝藏一样疯狂?不讲deep leaning你都不好意思和别人说你做机器学习的……
神经网络早就有了,多层神经网络也肯定早就出现过,但是在模型训练时 浅层还好,比如2层的(不算输入层,即只有输入层,单隐藏层,输出层的结构),使用BP方法训练,可以有不错的效果,可是,层数若是增加几层,比如弄个7,8层的隐藏层,使用BP方法训练时就会出现一种叫“梯度弥散”的问题,也就是说,在远离输出层的隐藏层训练其权值时,模型输出值与真实值之间的误差已经不能有效的指导权值的更新(这是BP算法自身性质造成的)。所以,多层神经网络效果不太好,因为没法很好的训练。
后来,针对这种深层网络,有人提出了新的训练算法,抛弃了BP方法。新的方法不再把整个网络中的权值作为一个整体同时训练,而是提出greedy的训练方法逐层训练:首先,只针对输入层与第一隐藏层进行训练,可以用auto-encode,rbm等等算法;然后,固定输入层,使用第一隐藏层与第二隐藏层进行训练,算法同上。依此类推…每一层的学习都是无监督的self-learning(自学习)也就是自己学习自己,至于能学出个什么东西来,我也不知道…应该是和数据和选定的算法有关吧。最后,在输出层与最后一层隐藏层训练时输入label做有监督学习,并根据训练误差做反向fine-tune(微调),具体怎么微调的,我也不知道。。。
我的个人观点:deep learning相对于神经网络的改进主要在以下几个方面:(1)由之前的作为整体训练改进为逐层贪心训练;(2)由之前的基于优化的思路(比如BP中的梯度下降求解)改进为即可有优化思路(比如auto-encode等)也可以有概率推理思路(比如RBM等)。
deep leaning是否有效的关键:(1)greedy训练过程中所选定的算法,比如,对某一个问题,auto-encode好还是RBM好?(2)据说deep leaning不适合解决离散信号(离散值)问题,而适合解决连续信号(离散值)问题。
另外,deep learning不一定单指deep神经网络,deep的思想可以用在其它模型中,而且貌似还挺有用。

思考两个问题:

(1)为什么要降维?降维的好处在哪里?降维前与降维后效果有什么差别?

(2)需要如何处理广告数据的feature?找出与图像的“同构”?还是把图像与广告数据都映射到一个新的“空间”,再找其中的关系?

9 thoughts on “2014年总结”

  1. 感觉SGD理论不大严谨啊,而且就业界来说没有说DNN就比LR更好,毕竟LR更简单也更易实现一些,能搞得了DNN的公司不多吧。

    1. 为什么说SGD理论不太严谨呢?我对此很感兴趣。
      百度的DNN用来做ctr预估,已经上线了,而且效果确实比LR好不少。
      能搞DNN的公司确实不多,技术实力和硬件资源还有领导层的意愿等等因素制约。

        1. 哈哈,其实我说的晓说的“SGD理论不严谨”本意是指“DNN理论不严谨”。其实DNN也还好,就是假设的太宽泛,不好解释而已。

  2. 看了下博主一篇叫总结的文章,深有感触,想到了之前自己在实验室里孤军奋战的场景,兴奋、疲惫、焦虑,不过你比我好点,迅速找到了几个比较好的点读论文,我就只能在统计学习方法、神经网络与机器学习,coursera公开课(nlp相关的,ml相关的),ufldl等等这些资料上推公式,玩toy dataset。当时我们实验室还不允许出去实习,好不容易软磨硬泡找了不到两个月时间出去实习了下,做了一段时间lr,才算真正接触到数据。

    现在我已经研究生毕业工作了(刚毕业两三个月),庆幸自己还坚守在这个行业里,而且慢慢地做一些有意思的事情,我看你这里面提到了优化方法(lbfgs,owlqn,sgd等),并行方法,最近我也在做,我的邮箱是banshengzuicf@126.com,希望能交个朋友,共同进步!

    1. 当时我们实验室是做声音信号处理的(是信号处理里非常偏的一个小方向),周围连编程的气氛都没有,更别说机器学习、推荐系统神马的了……

    2. 谢谢。
      最近实习比较忙,所以博客更新比较慢,更多的是记录学习过程中的一些心得体会。
      不知道你现在是做什么方向?我还是在做广告ctr预估,使用深度学习来做。目前专注于深度学习模型的解释以及优化算法,这件事情很难,但是我觉得很有意义而且很有趣。

Leave a Reply

Your email address will not be published. Required fields are marked *