programmer humor week 2

programmer humor from reddit “Hey, you know Binary Search Trees?” “Say no more.”After setting up a new floor on campus…Logins should be unique[Cringe] How to do codingHow to learn coding…

0 Comments

Learn More,Study Less

关于learn more study less 的思维导图 ![](/images/2017/03/learn more study less 15.45.08.png)holistic learning 的流程Acquire 获取准确、精炼地得到信息 简化 提取精华、略去无用信息 容量 知道的信息越多越好 速度 尽快完成获取阶段 Understand 理解了解信息的基本意思,并联系上下文来理解 理解信息的第一阶段:理解信息的表层含义 当遇到不明白之处,应该分解问题,找到真正不明白之处 Explore 扩展形成高速公路、模型及内部联系良好的结构 深度扩展 知识的由来、背景的探究 横向扩展 构造模型:寻找类似的知识的联系 纵向扩展…

0 Comments

Amdahl’s law

关于Amdahl’s law。Amdahl’s law,又叫做阿姆达尔定律,其意义在于表示了计算机并行计算处理任务的加速的极限。简略证明解释如下,假设一个任务需要时间$T$来完成,而其中可以被并行处理加速的部分比例为$p$,那么不能被并行计算加速的部分就为$1-p$,比如从磁盘上读取程序段就不能并行加速,而读取完成到内存中就可以开多个进程或者利用分布式的方法并行处理来加速。$$T = (1-p)T + pT$$开启加速后,可以加速的部分时间减少至原来的 $frac {p} {s}$$$T’ = (1-p)T + frac p s T$$则加速比就为$$S_{text{latency}}(s) = frac {T} {T’} = frac{1}{1 - p + frac p s}$$意义Amdahl’s law揭示了不管如何的进行并行计算,只要任务包含无法被并行加速的部分,那么加速比是有上限的,因为$$lim_{s…

0 Comments

Deep Learning Interview

整理一些关于Deep Learning的面试问题。问题列表CNN最成功的应用是在CV,那为什么NLP和Speech的很多问题也可以用CNN解出来?为什么AlphaGo里也用了CNN?这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性?以上几个不相关问题的相关性在于,都存在局部与整体的关系,由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性。如下图:低层次的直线/曲线等特征,组合成为不同的形状,最后得到汽车的表示。CNN抓住此共性的手段主要有四个:局部连接/权值共享/池化操作/多层次结构。局部连接使网络可以提取数据的局部特征;权值共享大大降低了网络的训练难度,一个Filter只提取一个特征,在整个图片(或者语音/文本) 中进行卷积;池化操作与多层次结构一起,实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示。为什么很多做人脸的Paper会最后加入一个Local Connected Conv?如果每一个点的处理使用相同的Filter,则为全卷积,如果使用不同的Filter,则为Local-Conv。后接了3个Local-Conv层,这里是用Local-Conv的原因是,人脸在不同的区域存在不同的特征(眼睛/鼻子/嘴的分布位置相对固定),当不存在全局的局部特征分布时,Local-Conv更适合特征的提取。什么样的资料集不适合用深度学习?数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势。数据集没有局部相关特性,目前深度学习表现比较好的领域主要是图像/语音/自然语言处理等领域,这些领域的一个共性是局部相关性。图像中像素组成物体,语音信号中音位组合成单词,文本数据中单词组合成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。对于没有这样的局部相关性的数据集,不适于使用深度学习算法进行处理。举个例子:预测一个人的健康状况,相关的参数会有年龄、职业、收入、家庭状况等各种元素,将这些元素打乱,并不会影响相关的结果。对所有优化问题来说, 有没有可能找到比現在已知算法更好的算法?No Free Lunch定律:不存在一个通用普适的模型,对于所有的学习问题都能做到性能最佳。对于训练样本(黑点),不同的算法A/B在不同的测试样本(白点)中有不同的表现,这表示:对于一个学习算法A,若它在某些问题上比学习算法 B更好,则必然存在一些问题,在那里B比A好。也就是说:对于所有问题,无论学习算法A多聪明,学习算法 B多笨拙,它们的期望性能相同。但是:没有免费午餐定力假设所有问题出现几率相同,实际应用中,不同的场景,会有不同的问题分布,所以,在优化算法时,针对具体问题进行分析,是算法优化的核心所在。用贝叶斯机率说明Dropout的原理Dropout as a Bayesian Approximation: Insights and Applications何为共线性, 跟过拟合有啥关联?Multicollinearity-Wikipedia共线性:多变量线性回归中,变量之间由于存在高度相关关系而使回归估计不准确。共线性会造成冗余,导致过拟合。解决方法:排除变量的相关性/加入权重正则。说明如何用支持向量机实现深度学习(列出相关数学公式)广义线性模型是怎被应用在深度学习中?A Statistical View of Deep Learning (I): Recursive GLMs ← The Spectator深度学习从统计学角度,可以看做递归的广义线性模型。广义线性模型相对于经典的线性模型(y=wx+b),核心在于引入了连接函数g(.),形式变为:y=g−1(wx+b)。深度学习时递归的广义线性模型,神经元的激活函数,即为广义线性模型的链接函数。逻辑回归(广义线性模型的一种)的Logistic函数即为神经元激活函数中的Sigmoid函数,很多类似的方法在统计学和神经网络中的名称不一样,容易引起初学者的困惑。下图是一个对照表:什么造成梯度消失问题? 推导一下How…

0 Comments

在Windows上安装并加速拉取Docker镜像的方法

Docker容器服务近来可谓是一日千里爆炸式的发展,但是在国内安装Docker或者拉取庞大的Docker镜像都不可避免的遇到蜗牛式速度的问题,本文主要关于加速下载DockerWindows客户端和镜像的方法。   下载Docker Windows客户端 使用Daocloud提供的下载地址,基本上几分钟即可下载完100Mb左右的Docker Windows客户端,而用Docker官网的下载地址可谓几乎没有速度。 加速拉取Docker镜像 不挂VPN直接拉取Docker镜像绝对是灾难性的体验,不仅慢如狗而且极容易中断连接。这里我们同样使用Daocloud提供的镜像站如这里,使用方法为在Docker右键菜单的设置选项内的DockerDaemon里面,加上一段地址改为如下形式, 1 2 3 4 5 6 { "registry-mirrors": [ "http://59dcc468.m.daocloud.io" ], "insecure-registries": [] } 之后Docker会自动重启,之后再Pool镜像即可享受火箭加速般的提升!  

0 Comments

Way to solving the .DS_Store problem of Mac

本文主要讲述如何解决Mac OS下面的.DS_Store文件的问题。在Mac OS上,.DS_Store文件 是 Desktop Services Store 的简称,是用来存储文件夹的显示属性的自定义属性的隐藏文件,:比如文件图标的摆放位置,如文件的图标位置或背景色,相当于Windows的desktop.ini,删除以后的副作用就是这些信息的失去,不过总体而言影响不大。最近上手的Mac,.DS_Store 第一次烦到我,是在Github上folk了人家的项目自己提交了想Pull Request 的时候出现的问题,我明明只修改了一个文件,为什么在每个文件夹下面都出现了这么些个奇怪的 .DS_Store ??删除了这些文件以后再第二次提交的时候又会出现(期间我用了Finder),谷歌以后才发现这原来是系统自动生成的,要想它不出现,除非只用Shell不用Finder。。。接着找资料发现如下办法,安装ASEPSISOS X 10.11以前的版本直接安装即可OS X 10.11需要关闭SIP(System Integrity Protection)再使用命令touch ~/.no-asepsis-os-restriction 新建文件再安装重启系统然后可以用以下指令删除mac上所有的.DS_Store:123find ~ -name ".DS_Store" -delete或者find <your path> -name ".DS_Store" -delete参考资料https://www.zhihu.com/question/20345704https://zh.wikipedia.org/wiki/.DS_Store…

0 Comments

Explanation of Convolutional Neural Networks

卷积神经网络(Convolutional Neural Network),简称CNN,是机器视觉领域的主要神经网络模型。本文主要对CNN做一个简明全面的介绍。上图是90年代的LeNet的结构,当时主要用于字符的识别,当前有许多的新的CNN结构,但是大体上都是采用了与LeNet类似的主要思想。本文主要以LeNet为例来做讲解。LeNet的主要组成部分:卷积层非线性变换(ReLU)池化层或者下采样分类(全连接)图片就是矩阵在讲卷积与卷积层之前,我们首先介绍一下图片的相关的概念。本质上,每张图片都是像素值的矩阵。彩色图片具有三个通道,所谓的RGB图片,也就是在红色、绿色和蓝色三个颜色的矩阵,每个像素值都是[0,255]的值。灰度图片只有一个通道,所以只有一个矩阵。卷积层CNN由卷积而得名,那么什么是卷积呢?先来看图片首先我们有如下的5*5的矩阵,它的每个像素值都由0或者1组成再来一张如下的3*3的矩阵用这个33的矩阵对以上55的矩阵进行卷积,可以表示为如下的过程,上述过程可以描述成,33的矩阵首先定位到55的矩阵的左上角,两者覆盖重叠到的部位进行点乘再求和,得到的值是新的矩阵的左上角第一个元素,接着33矩阵向右移动一个像素,也叫一个stride,进行下一次卷积操作,知道遍历完毕,得到一个新的矩阵。在CNN中,这个33的矩阵叫做滤波器或者卷积核,得到的新的矩阵叫做特征映射。可以说,卷积核的作用就是从原图片中发现特征。所以对于同一张图片,我们可以用不同的卷积核去操作,得到完全不同的特征映射。考虑如下的图片,我们用不同的卷积核进行操作,得到的结果如下,另一个例子如下,如图,两个非常相似但是方向不同的卷积核对同一张图片进行卷积,得到的不同的结果。在训练过程中,CNN会自动学习到这些卷积核的参数,但是我们还有一些超参数需要手动确定,如卷积核个数、大小以及网络的结构等等。而特征映射的大小由三个参数来确定,Depth:也就是卷积核的个数,我们用几个卷积核进行操作,那么就可以得到多少个重叠着的特征映射,也就是特征映射的深度。Stride:卷积时每步移动的大小,容易得知,步子越大,那么卷积的次数也就越小,那么特征映射矩阵也就越小。Zero-Padding:指的是是否在原图像周围补上零再进行卷积,,这样也是控制特征映射大小的方法,带有Padding和不带有Padding的卷积分别叫做宽卷积和窄卷积。非线性映射(ReLU)ReLU函数是什么?初一看它的全称Rectified Linear Unit好像特别高大上,其实它的函数形式非常简单,就是$$output = max(0, input)$$也就是将原输入的负值全部替换为0。顺便一说,深度学习业界充斥着这种现象,如多层感知机与神经网络、甚至是Deep Learning这个称号本身都是这样改过来的“好名字”,不得不说,起个好名字对于成功也是非常主要的啊!话说回来,用ReLU处理过的图片的效果如下:除ReLU之外,还有sigmoid函数和tanh双曲函数等非线性变换,但是ReLU被证明表现更加,所以也就更常用。池化层池化(pooling)也就是信号处理领域的下采样Downsampling,其作用是对特征映射保留主要信息的同时进行降维。根据计算方式的不同可以有Max、Average、Sum等多种pooling方式。以上展示了使用2*2的窗口对经过卷积和非线性映射的矩阵的Max pooling操作。这里的stride是2个像素,对每个区域采用最大值。在网络中,pooling是对每个特征映射单独操作的,于是我们会得到相同数目的输出。下图展示了pooling操作,pooling操作显著地减小了输入的空间大小,除此之外,使得输入更加小,更加容易计算减小网络的复杂程度,有利于对抗过拟合使得网络对于扰动等噪音更加鲁棒,因为微小的扰动对于pooling结果没有影响有益于物体探测的准确性全连接层经过两轮的卷积-ReLU-pooling操作,接下来就是标准的全连接神经网络结构了,所谓全连接,也就是上一层的每个神经元都与下一层的每个神经元有连接,倒数第二层的输出是每个类的概率,再经过一个softmax层进行归一化处理,我们得到了最终的输出:和为1的每个分类的概率。训练过程上面把CNN拆开了讲,接下来我们把各个组件合起来看一下CNN的训练过程。比如我们的输入是一张船的图片,而输出则是属于船的概率是1,如[0,0,1,0]。那么训练过程如下步骤1:以随机值初始化卷积核和权重参数步骤2:网络得到输入,进行前向的计算(卷积、ReLU和pooling)得到最终各分类的概率,假设是[0.1, 0.3, 0.2, 0.4],因为参数都是随机的,那么结果肯定也是随机的步骤3:利用平方误差计算错误的损失函数大小步骤4:反向传播计算error对于各个参数的梯度,对参数进行更新,以减小错误程度注意到我们只更新卷积核的参数以及全连接的权重,其余的参数已经在训练之前指定在训练过程中,网络逐渐“学习”到如何正确分类图片,这是通过逐渐修改更新参数得到的步骤5:对于所有训练集内的图片重复步骤2-4CNN的可视化CNN在人脸识别内的应用,如上图所示。对于CNN的原理,结合上图我们可以进行如下的解释:CNN的卷积核由下到上是逐渐探测复杂的特征的,比如第一层卷积核的特征映射是简单的明暗线段纹理,第二层就可以得到曲线等复杂一些的特征,到了第三层探测的特征已经是人脸的形状轮廓了,后面的层对于前面层的特征进行组合变化而得到更加复杂的组合。这就类似单层感知机连异或函数都无法表示,多层感知机组合起来也就是神经网络却可以拟合任意复杂的函数的原理一样。这里有一个很棒的关于CNN原理的展示demo,如图参考An Intuitive Explanation of Convolutional Neural Networks  

0 Comments