0%

最近很忙,老婆怀孕需要照顾,新的工作需要熟悉铺开,整个人都处于一种疲于奔命的感觉。所谓的闲想,也只是在深夜独处时,这暂时的宁静,让我有点“悠闲自得”的感觉。现在是凌晨6:30,可能有些人已经起床,有些人比如我,还没睡。刚改完了一些代码,还不想睡(可能因为自己太珍惜这独处时光了),那就在这思考思考。

关于责任

小时候总觉得父母给的不够,似乎没有那么多关心,没有那么多问候,现在才明白,爸妈他们已经做的很好了。因为对自己好,是一种本能,对别人好,是一种选择,而选择常常是困难的。工作三年多了,也开始了很多角色的转变,这其中最大的本质区别,就是责任越来越大。父母需要负责,老婆孩子需要负责,似乎现在负担最小的是对自己负责,哈哈。不过话又说回来,这并不是件坏事,我觉得这才是真正的成长。现在很多人不婚,不生养后代,其实就是在逃避责任而已,毕竟不需要对其他人负责的人生,是看似更加轻松愉悦的。然而,“不知道所有命运赠送的礼物,早已在暗中标好了价格”。

关于理想

上学时,总有大理想,工作后,则很少谈及理想这个词。有人说,这是因为学生时代,人总是太轻狂,而步入社会后,收到一翻磨砺,才知道脚踏实地。我觉得有点道理,但不全对。学生时代有各种各样的可塑性,确实可能无限,就好比股票一样,有想象空间比实际盈利更重要。而工作后,每个人都会被日趋分化,可塑性逐渐降低,专业性逐渐升高。在这个过程中,每个人的理想也会更加明确。不提理想,因为现实太残酷,大多数人会发现,能力匹配不上理想。

关于善良

最近公司员工大会,小龙说,善良比聪明更重要。小龙说的是产品的建设,而我想,这大概也适用在人身上。因为聪明是一种天赋,而善良是一种选择,而且,我觉得大智和大善是殊途同归的,大智的人,必然善良。

上周从BIGO离职了,下一站微信。离职原因暂且不表,只是这段时间得把去年未休完的9天 年假休了,所以也就难得这段清闲时光。然而我是个坐不住的人,让我出去玩吧,总觉得一 个人也没啥意思,在家待着吧,总得找点事做。所以,看看书,写写博客,把以前看过的资料、 论文、代码,重新加以总结和思考,或许能让我这接近两周的gap更加充实一些。

计划如下:

  1. 重新看一遍西瓜书。虽然现在视觉任务都用深度学习了,但是传统的机器学习的很多思想 还是很重要,具有启发性的。譬如,我们曾经用深度学习预测一段短视频是否是未成年人, 然而深度模型都是针对单帧图像做的,那么视频中如何做呢?比较简单的有加权平均、投票 等方法,显然,这些方法都很trival,且同样有阈值选取等问题。最后,我们用xgboost综合 多帧结果,效果提升了接近8个百分点。显然,这需要有传统机器学习的背景才能想到这些方 法。因此,趁着这个gap看看西瓜书,重点看看树模型和聚类等非监督算法,看看对平时的工 作是否能有些启发。

  2. 重新看一遍cs231n。其实深度学习在视觉上的应用,本人做过分类、目标检测、关键点预测, 基本对视觉类的任务都有个大致了解。然而,自己始终有个盲区,就是rnn类似的工作从未接触 过,因而在实际工作中,解决问题的思路也会受限,常常会去避免使用rnn的方法。虽然实际 工作中,rnn并非表现良好的方法,但作为一个盲区,还是得补一补功课,有助于以后解决问题 的思路开阔点。

  3. 锻炼身体。工作后,就很少运动,肚子上的肉也渐渐多了起来,最主要的是,常常感觉 精神不佳。这段时间有空每晚去儿童公园跑跑步,恢复下体能吧。

就这些,其它就吃好喝好,为下一份工作攒足精力!

在BIGO工作期间,面试了不少求职者,有应届毕业生,也有工作了好几年的,当然,有时候 也有像我一样,从其他领域转来做深度学习的同学。面试完后,对于一些同学,面试官之前 常常有争议,有的觉得挺不错的,其他面试官觉得一定不能要。所以,在面试了很多次后, 我自己也常常想,什么样的同学是企业所需要的,如何识别其中优秀的同学,又如何识别那 些夸夸其谈之辈呢?

个人觉得,一个优秀的算法工程师,有以下气味:

代码能力很强

这个是我觉得最为重要的能力。常常遇到一些对各种模型paper了如指掌,从faster rcnn系列 到ssd, yolo,无所不知,然而让他写一个计算iou的代码就傻眼的同学。在我看来,这些同学 只是调包侠而以,在求职市场上是最低级的存在。有些同学也许会反驳我,一些博士代码能力 也一般,可是数学好,做模型强啊。恰恰相反,我认识的一些真正的牛博中,没有一个不是代码 能力强悍的,可以想象,他们那些精巧的模型,没有强悍的代码能力做支持,是如何开创性的 实现出来并发paper的?所以,纸上谈兵谁都会,show me the code。

真正理解算法,而不是只会推导公式

我面试时,很少让人直接去推导个什么公式(当然,各种线性模型我还是会考察的,这是基本 的线性代数能力),但是我会去考察其形象理解能力。譬如,我常常看到有同学简历里写到 会svm,于是我会问他们,svm和逻辑斯特回归,当数据类别严重不均衡时,应该选择哪个更 好呢?这个问题不需要会推导求解公式,然而却能真正考察面试者是否真正理解svm的出发点, 如果这个问题回答不出来,我认为,即使是会推导svm的求解公式,也是比较差的候选人。

学习意愿强,不挑活

算法工程师之所以叫算法工程师,是因为他们常常会遇到未知的问题,学习并尝试解决它, 所以,学习意愿不够强的人,不能要,知识储备再高,也会遇到未知难题。挑活的,也不能 要,实际工作中,从找数据到清洗数据,这都是落地算法的必经之路,没有人能有特权只选择 自己想干的,把脏活累活丢给别人。

实际面试中,面试10个人,能有2个人能达到上述要求就不错了。所以,之前在知乎看到一个 讨论,说2019的校招深度学习岗位竞争是否很激烈,我想说,其实觉得激烈的,大多是那些 看着这行有热钱,网上随便看了看视频就来面试的,对于真正在这行有能力的同学,一点都 不激烈,是被各个公司抢着要的。而且,经过这么久,团队从无建立,各个公司也明白了, 其实算法团队招人重在质量,而非数量,招10个混混,不如一个大神,算法领域确实如此。

暴力channel维度的缩减

将layer的输入输出在原网络结构上按相同比例缩减。例如nsfw就是在resnet-50的基础上 缩减而来的。

bottlenect结构

使用1x1的卷积核对原输入降维后,再进行大卷积核的卷积计算。

group卷积

分组卷积先按channel分为多个group,每个group内分别做卷积,group的输出再concat, 最后使用1x1的卷积把所有group信息综合起来。(resnext思想,shufflenet进行了改进)

depthwise卷积

group卷积的特例,group数量等于输入channel数量,即分别对每个channel做卷积,不 考虑channel之间的相关性,然后再由1x1的卷积获取跨通道之间相关性的联系。

注:本文将会以论文读后笔记的形式呈现,后续不断补充占坑

An Analysis Of Deep Neural Network Models For Practical Applications

在此综述下总结下2015年前的主流CNN架构及其贡献

  1. LeNet5(1998):
    • CNN三特性: 局部感知、下采样、权值共享
    • 采用三层架构:卷积、下采样、非线性激活函数(tanh, sigmoid),多层神经网络(MLP)作为最后的分类器
    • 后续的CNN架构大多基于LeNet5的这些特性,然而由于当时硬件计算能力限制,后续很长时间神经网络没有发展
  2. AlexNet(2012): 赢的2012ImageNet冠军,从LeNet5的5层增加到7层
    • 使用ReLU作为激活函数,降低计算量
    • 引入Dropout防止过拟合
    • 引入Max-Pooling技术
    • 使用双GPU,分group卷积,显著减少训练时间
      阅读全文 »

硕士期间也是做传统视觉相关的研究,但自己并没有选择继续读博,而是选择去了网易游戏 工作。工作这两年,一来对做游戏逻辑感到枯燥厌恶,二来也在媒体的推波助澜下见识了 深度学习横扫计算机视觉界的威风,很多以前看似很难的视觉任务,突然都变得简单,所以, 摩拳擦掌又想回去做计算机视觉。进入BIGO做了一段时间,发现自己做的还不错,深度学习 入门的很快,所以在这里记录下自己的入坑经历,希望可以帮到也有类似想法的同学吧。

阅读全文 »

文件夹配置

干掉默认的几个文件夹,相关配置/etc/xdg/user-dirs.defaults,~/.config/user-dirs.dirs,只需修改个人文件即可,参考配置

1
2
3
4
5
6
7
8
XDG_DESKTOP_DIR="$HOME/"
XDG_DOWNLOAD_DIR="$HOME/"
XDG_TEMPLATES_DIR="$HOME/"
XDG_PUBLICSHARE_DIR="$HOME/"
XDG_DOCUMENTS_DIR="$HOME/"
XDG_MUSIC_DIR="$HOME/"
XDG_PICTURES_DIR="$HOME/"
XDG_VIDEOS_DIR="$HOME/"

然后删除默认文件夹即可,建立常用文件夹

1
cd ~ && rm * -rf && mkdir data downloads repo workspace

NVIDIA CUDA

  1. 安装显卡驱动
  2. 安装cuda
    1
    2
    3
    sudo service lightdm stop
    sudo ./NVIDIA.xxx.run --no-opengl-files
    sudo ./cuda.xxx.sh --no-opengl-libs

软件配置

  1. CLion, PyCharm:

    • 下载后分别解压到/opt/clion /opt/pycharm
    • Help->Edit Custom Options,加入

      1
      -javaagent:/usr/share/java/jayatanaag.jar
    • Tools->Create Desktop Entry

    • licence: 账号密码见网易云笔记
  2. QtCreator:

    • 编辑 /usr/share/applications/DigiaQt-qtcreator-community.desktop
      1
      Exec=env XDG_CURRENT_DESKTOP=GNOME /opt/Qt5.10.0/Tools/QtCreator/bin/qtcreator
  3. VMWare Player

    1
    vmplayer.showChrome = "FALSE"
  4. l2tp vpn

    1
    sudo apt install network-manager-l2tp-gnome
  5. vim && font && ssh

其他需要安装的软件

  • SecureCRT, SecureFX
  • 网易云音乐,搜狗输入法