2018-10-24 18:57:38 edogawachia 阅读数 901
  • 深度学习基础教程

    接触数据挖掘的算法多年,近一两年开始用到深度学习的算法.我也是从0开始一点一点学的,在学习的过程中感觉现在的教程不太适合初学者,现有的教程或书,要么是大堆的数学公式,吓跑初学者,要么是大堆的代码淹死初学者,要么是大堆的理论比喻,迷惑初学者,要么是大堆很牛的东西(没有参考文献),打击初学者.我觉得,把数学原理弄明白,再能用代码实现算法,这是主要的,这个课程就是为了帮助初学者实现这个目的.

    2378 人正在学习 去看看 执著
  • 京东 (凉)
  • momenta (凉)
  • 富士通 (offer)
  • 华为2012/诺亚 (offer)
  • 360 (池)
  • 阿里 (凉)
  • 爱奇艺 (凉)
  • 依图 (凉)
  • 捷通华声 (未知)
  • 百融金服 (offer)
  • 佳能医疗 (退)
  • 欢聚时代 (池)
  • iHandy (offer)
  • 苏宁 (offer)
  • 深睿医疗 (offer)
  • Aibee (offer)
  • 联想 (凉)
  • 新浪移动 (池)
  • 百度 (offer)

京东广告部(商业提升事业部):2018年04月26日20:07:02

状态:GG

这个岗位主要是在用深度学习在做图像,如OCR,GAN用于广告图片生成,图片识别和分类等,因此对于传统机器学习的内容基本没怎么考察,所以之前准备的有点偏,都没有用到。面试官是一线技术人员,所以对于非技术类的内容都没有涉及到。问题相对比较基础,但是理论方面不会太深究比如推公式之类。总之需要多读写论文和代码。

基本问题:

自我介绍
项目相关问题(问题背景,网络结构)
为什么采用跳线连接(面试官顺带讲了一下在目标检测中)
过拟合问题
分类问题的CNN
目标检测的CNN结构,RCNN,fast-RCNN等。不了解(他们部门日常用到的所以提问到)
ResNet中的block结构,原因
inception的结构
GAN相关,DCGAN结构,pix2pix结构,实现方法。
RNN中的门控结构
非极大值抑制的代码
求一幅二值化图中最大4连通域的面积
能来实习的时间
有什么要问我们的

momenta(初速度科技)视觉算法工程师:2018年5月4日18:50:49

状态:GG

电话面试,约定两点开始,之前说的是不需要电脑,后改成3点,并且需要写代码。主要面试过程如下:

问题:

自我介绍
介绍项目(网络结构,训练label和测试的label(也就是评价准则),U-Net,AE)
目标检测和分割,分类问题的模型随便讲几个
CNN的component,比如conv,pooling等等,问pooling的BP过程
机器学习相关算法用过的随便讲几个,这里讲了下random forest,顺带问了bagging的过程,能否做回归问题。(random forest做回归,是优化残差平方和最小,以此来分裂结点)
然后就是code:
1,rotated sorted array中找出某个target。本来用python写的,结果被要求用C。。。有些忘了。。。

int FindNum(int* list, int N, int target) {
    left = 0;
    right = N-1;
    while(left < right)
    {
        mid = (left + right)/2;
        if list[mid] == target{
            return mid
        }
        else if(list[mid] > list[left]){
            if(target < list[right] || target > list[mid]){
                left = mid + 1
            }
            else{
                right = mid
            }
        }
        else {
            if(target < list[mid] || target > list[left]){
                right = mid
            }
            else{
                left = mid + 1
            } 
        }
    }
    return -1

2, 一个数组中有正有负,找到一个连续的子序列,使得它的和为某个target

这个没写代码,只让说了下思路,开始考虑最大和子序列的思路,后来发现不行,在面试官的提示下解出来的。。。trivial的方法可以找到初始位置,遍历结束为止,然后对初始位置遍历,就是n^2的复杂度。正确的解法是将从第一个到该位置的子序列的和存成一个数组,然后找到两数字相减(后项减去前项)为target的两个数的位置,这两个位置就是连续子序列的开始和结束,那么就转化成了一个TwoSum的问题,考虑index和val转换一下位置,以val为key,index为val做成hash表,可以在O(n)的时间内完成。

富士通中国研究中心(fujitsu)

状态:offer

主要问了下项目,针对他们当前正在进行的项目(人脸识别的网络压缩相关内容)提问有没有什么更好的减少模型参数并且能保证性能的方法。

华为2012实验室 2018年05月30日19:35:43

状态:转正offer,诺亚

主要针对项目提问,如项目背景,采用的网络结构,GAN采用的模型,训练样本有多少,等等。并介绍了他们主要的方向,偏重于图像的语义也就是高层分类识别等问题,还有用GAN做分割等等。

360 北京奇虎科技有限公司 2018年08月08日19:34:22

状态:GG

一站式面试,一面二面HR面安排在一起。。。搞了一天。

一二面:
项目相关,介绍背景,方法,网络结构,可用性,评估指标等。
代码:数组旋转。
机器学习: Adaboost算法简要说明。
优化方法:sgd,以及其他如Adagrad,adam,RMSprop等。
1w个word组成了1kw个文档,如何给定一个word找到所有含有该word的文档。
介绍360研究院现在在做nlp相关,问了下n-gram,自然语言处理建模的基本流程。。。不太清楚
linux命令:awk,grep
HR面:
常见问题从略
为何选择赴台交换
是否投递其他公司 未来意向 是否准备定居
日语德语水平,能否交流
项目情况,承担角色,做的实际事务。

阿里巴巴 2018年08月21日19:08:57

状态:已回绝

远程面试。报的岗位是图像相关,但是面试官问的很多是ML的问题,当然也涉及了一些DL的问题。没有问任何项目相关和实习相关,都是专业知识问题。凉凉。问题整理如下:

1, code:一个list,元素都是正整数,找到把他们concat起来的最小的整数,如:[1, 23, 7, 4] 输出 12347
2, LR的loss 函数,LR的原理,sigmoid函数的公式,特点,选择sigmoid函数的原因。 LR loss函数的优化方法。牛顿法原理,sgd,Adagrad, momentum方法各是什么原理。
3, SVM loss函数
4,决策树怎样构建,用什么准则划分,除了信息增益以外是否还有其他的分支标准?
5, ResNet block的结构,原理
6, bottleneck的作用
7, googlenet的原理
8, BN层的作用,具体计算方法,参数的作用,为什么采用BN,测试时alpha,beta如何处理
9, dropout的原理,实现方法,测试阶段如何处理
10, RNN相关,LSTM和simple RNN的区别,具备哪些simple RNN不具有的能力
11, 为什么会梯度消失,梯度弥散,原理是什么。

爱奇艺(iQiYi)2018年08月24日14:23:09

状态:GG

是爱奇艺的openday活动,上午宣讲各部门情况,下午一点开始面试,一面,二面,交叉面都安排在下午,也是花了一整天。

一面:
项目介绍
应用背景,网络结构,重点问了residual learning的方法原因,梯度消失如何避免。答:skip connection,residual learning , ResNet block,BN层,激活函数等,有无其他方法。
卷积操作的原理,如何提高效率(这里指的是大图如何处理。stride设置为大于一的数,相当于把conv和pool的过程整合在一起),BN的原理。
code:1, 字符串转成整数 2,two sum 问题

二面:
项目介绍
针对项目中的相关问题提问
意向的工作内容和方向

交叉面:
这一轮的面试官是上午介绍人脸识别姿态检测等方向的。
项目介绍,是否有结果,是否投入使用
人脸检测相关,框架,是否在widerface上测试,结果如何
意向的工作内容和方向
有什么要问我们的

依图科技 2018年09月01日20:26:55

状态:GG

代码:

binary列表,删除连续的同数字的一个子序列,得到的结果再删除,仍然按照上述要求,问可以删除的最多元素数目。O(n2)的算法能否进行加速。

三个盒子,A B 两种球, 一个盒子四个球,已知三个盒子分别为全A,全B,两个A两个B,两个人分球,只有拿出来才能知道球的颜色,问如何使得两人各3A3B。

NMS 非极大值抑制算法实现,soft-NMS算法实现,如何改进复杂度。

链表linked list的排序,C++ 实现。

项目相关,介绍背景知识,数据集来源,task介绍。

目标检测相关

有什么问我们的? (业务内容,应用背景,技术方面等)

捷通华声 2018年09月21日16:33:58

状态:未知

SVM 推公式。

项目介绍。

用的开发框架 tf torch

C++ 编程?

LSTM介绍

语音相关模型

googlenet 结构, inception的原理

百融金服

状态:offer

初试,基本没聊技术。
二面, 项目介绍,机器学习相关,随机森林的随机性体现在哪里。介绍了百融的AI在各领域的应用场景。
HR,比较常规。
ps:实验室主管单独面:介绍项目,二分查找树,如何以最短路径通过推箱子游戏。

迅雷

状态:GG

调岗位到大数据,确实不匹配。
问了下MySQL,hadoop等等,不了解。。。
面试官介绍了下漏斗模型,以及介绍了数据分析岗位的工作内容。

佳能医疗 2018年09月28日 16:00:00

状态:薪资问题拒

项目介绍。
图像分割。
传统机器学习算法(SIFT特征提取等)
SVM的优势
决策树的原理
RandomForest的原理
介绍了下他们正在做的事情,一般是用传统图像处理结合传统机器学习来做医疗图像的一些相关任务。

平安科技 2018年09月29日20:09:58

状态:offer

初试,项目经历。 YOLO相关,目标检测的流程,U-Net结构,图像分割问题,(医学图像应用较多)。
HR面,常规问题。 如何向外行科普【机器学习,图像处理,语音识别,nlp相关】。

欢聚时代 2018年09月29日20:05:11

状态:备胎池

项目细节。如最终结果的评价指标。
去噪的经典模型及论文,从汤晓鸥的开始。
解释梯度消失和梯度爆炸。
视频质量提升相关。
多线程和多进程。
交叉熵损失函数。
介绍了他们的工作,音视频编解码,以及SR等。

iHandy 2018年9月29日(周六)16:00

状态:录用

一面:

各种性格测试23333.
编程题,数连通域,用dfs实现。
面试官介绍业务
提问基本问题:
准确率和召回率
什么是过拟合,如何避免。
数据结构相关,dfs,bfs,以及对应于stack和queue的关系
网络OSI七层模型,tcp在那一层,ip在那一层,tcp以外其他的协议(udp),udp和tcp的区别。
面向对象编程?C++?
python中的 *args, ** kwargs.
python中创建一个dict的方法
怎样将list中的元素变成不重复的 : list(set(somelist))

二面:

项目相关,人脸检测,介绍业务,pytorch和tensorflow的区别,更偏向哪一种?
对工作强度有什么要求?

苏宁AI研究院 2018-09-30

状态:offer

两个面试官同时一面,一面通过后补笔试和流程。
基本都是项目相关,以及一些基础知识,此略。
介绍了一下苏宁的1200工程,以及一些工作任务情况。

深睿医疗 2018年10月12日

状态:offer

感觉比较偏research的一个实验室,主要是跟医院和医疗机构合作,做医疗影像相关。

先做一套理论笔试题,相对比较简单,大概内容如下:
贝叶斯定理,过拟合,BP公式,样本不均衡,BN层,常用网络结构,softmax和cross entropy等基础问题。
然后是一面,偏重对模型的理解和对医疗图像中的一些特殊场景的解决方案。
一面完了以后给了一套工程笔试题,主要是python语法,以及算法。
内容大概有:python中的直接赋值,深浅拷贝,list comprehension等。算法:递归和迭代写fibonacci数列,两个stack实现一个queue,各种排序算法以及复杂度。
介绍项目,网络结构,样本生成等基础问题。
如何处理医疗图像中segmentation任务里,目标区域较少且面积较小,且有尺度变化的样本不均衡问题?
不同医院的数据的transfer learning
ResNet结构,原理
BN层原理
分割相关,下采样可以用什么代替(dilated conv),空洞卷积的原理,可能的问题。
GAN的原理,perceptual loss的原理
样本不均衡,object detection中的SSD如何处理:hard negtive mining
常见loss函数,softmax相关
如何压缩模型,mobilenet原理,其他方法?
蒸馏法实现teach和learn的原理,如果loss为softmax,应该用归一化后的p还是之前的logit做教学的target?为什么?
如果标注数据是noisy label,应该如何处理?如果有金标准,有普通医生的标注,如何融合?

ps :复试加面,主要考察工程能力(即代码)和机器学习无关,内容:
用什么语言?(python,少量C++)
针对python提问:
简述yield的用法。
a = [1,[2,3,4],5]
b = a
b[1] = [0,0,0]
b[1] [:] = [0,0,0]
结果?
def func(a, b=[]):
b.append(a)
重复调用该函数,结果如何?(默认值会在内存中改变,所以后面的b的初始值就不是[],而是上一次的结果)
lambda表达式
hash表原理,如何处理hash冲突?
平衡二叉树原理
两个stack实现一个queue
快排算法(quick sort)

结束后又加了一个首席科学家面试,面对大佬灰常紧脏。。。
主要问了下地震图像的特性,和常规自然图像的区别,处理时应当注意的事项。可能的方向。(不得不说大佬就是大佬。。。虽然没做过地震图像,但是经过我的简单描述后,就能提出很有针对性的问题和指出一些可以做的方向,而且很多刚好和我的导师的思路是一样的。。。膜。。。)low-level问题的网络的特性,即在保证分辨率的情况下derain,denoise,desnow,deblock,dering,dehaze等等,关键是保证分辨率不降低。医疗场景下的图像识别和分割任务的特点,顺带聊了下他们的业务场景,如肺结节,乳腺癌,脑卒中等的影像学任务。最后聊了下职业规划之类,略。

最后是HR面,聊了下具体的业务情况,工作环境情况等等。总之感觉是一家很务实的公司,在工程和技术中更偏重与技术层面,即算法方面,提升业务水平。因为面试的他们的部门是 深睿医疗实验室, 所以个人感觉还是很学术的,和各高校也有合作。

Aibee 2018年10月13日20:34:12

状态:offer

林元庆大佬的公司,17年11月才创立,这是它们第一次校招,去凑了个热闹。

一面:
项目介绍,常规。
相对比较特别的几个问题: 如何看待深度学习的发展方向和趋势?在新零售领域可能会有那些应用?图像处理的发展趋势?
代码题:如果说‘abab’,或者‘aaa’类似这种具有重复出现的字符串是我们的target,只有ab两个字母组成的长度为N的字符串总共有多少种可能的目标串?(递归求解),避免重复计算,加入缓存,如何加入缓存?如何更新缓存?

二面:
项目相关,背景知识介绍,网络结构?
目标检测和语义分割相关
算法题:kNN,k较小,N较大,如何处理?

HR面:
个人信息。
遇到最困难的事情?如何看待?团队如何分工合作?对自己的评价?
HR介绍了公司的主要项目:智能零售(万达,K11),智能旅游(景点闸机以及引导二次消费),智能金融(ATM机和银行柜台的智能化)等。主要是结合cv,如OCR,检测识别等相关内容。

联想研究院 2018年10月14日

状态:GG

联想是面到现在唯一一家技术岗用群面的方式进行的科技类公司。。。。印象分直接 × 0.7 。。。
其实还是因为联想招来面试人数实在太多,而面试时间只安排了两天,所以不得不群面。。。每组大概13,14个人左右。面试共45min,平均每人3min.。。。方式分成两个组,讨论一个问题,然后选择代表上黑板上讲。
问题是一个经典的算法题,就是单源最短路径,Dijkstra算法,考虑如果有权值突变,如何更高效地更新路径。(是一个交通场景)。最后派个人讲一下讨论结果和思路。。。
emmm。。。。就这样。。。

新浪移动 2018年10月16日

状态:未知

一面是一个做推荐的面试官,所以问了下基本情况后,只问了几个很开放的问题,如介绍一种场景,可以用什么方法实现推荐?等。。。由于没有推荐的背景,所以就简单说了说思路。好心的面试官把我推荐给了cv的主管,然后二面,主要考察了网络结构,ResNet结构,如何压缩模型,GAN相关,检测相关,等等。三面HR面,简单聊了下个人情况等等。

百度 2018年10月20日

状态:未知

一面:似乎是交叉面。给出一个序列,如何生成随机排列。给出一个序列流,如何随机取出M个。
二面:机器学习基本问题,code:四则运算表达式的parser(逆波兰表达式后操作)
三面:项目,常规技术问题。如何科普GBDT。1000个数字中为1到999,某个数出现了两次,其他的都是一次,找出那个数是多少。对部门的偏向。

————————————————————————————————————————————————————
END

2019-12-26 22:19:40 yjw123456 阅读数 87
  • 深度学习基础教程

    接触数据挖掘的算法多年,近一两年开始用到深度学习的算法.我也是从0开始一点一点学的,在学习的过程中感觉现在的教程不太适合初学者,现有的教程或书,要么是大堆的数学公式,吓跑初学者,要么是大堆的代码淹死初学者,要么是大堆的理论比喻,迷惑初学者,要么是大堆很牛的东西(没有参考文献),打击初学者.我觉得,把数学原理弄明白,再能用代码实现算法,这是主要的,这个课程就是为了帮助初学者实现这个目的.

    2378 人正在学习 去看看 执著

引言

在神经网络中,为了更有效的计算梯度,需要用到反向传播算法。我们先从链式求导法则开始。

链式求导法

先介绍下链式求导法则,在后面的反向传播算法中会用到。

y=g(x),z=h(y)y = g(x),z=h(y)

那么dzdx=dzdydydx\frac{dz}{dx} = \frac{dz}{dy}\frac{dy}{dx};

x=g(s),y=h(s),z=k(x,y)x=g(s) ,y = h(s), z = k(x,y)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tCHUNDUb-1577369599077)(_v_images/20191226202915321_20747.png)]

改变了s会改变x和y,从而改变了z。

dzds=zxdxds+zydyds\frac{dz}{ds} = \frac{\partial{z}}{\partial{x}}\frac{dx}{ds} + \frac{\partial{z}}{\partial{y}}\frac{dy}{ds}

注意,如果改变s会改变多个变量,它们的关系也是成立的。

损失函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnxvSeRt-1577369599078)(_v_images/20191226203608959_23215.png)]

假设给定一组参数θ\theta,把一个训练数据xnx^n代入NN(神经网络)中,会得到输出yny^n

CnC^n是输出yny^n和实际y^n\hat{y}^n距离函数,值越大代表越距离远,也就是效果越不好。

那在神经网络训练算法中,损失函数定义为:

L(θ)=n=1NCn(θ) L(\theta) = \sum^{N}_{n=1}C^n(\theta)

如果把损失函数对参数ww做微分的话,得到

L(θ)w=n=1NCn(θ)w \frac{\partial L(\theta)}{\partial w} = \sum^{N}_{n=1}\frac{\partial C^n(\theta)}{\partial w}

只要计算出某一笔数据对ww的微分,就可以得到L(θ)L(\theta)ww的微分。

在这里插入图片描述

假设我们先考虑这个神经元。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eth5wURE-1577369599079)(_v_images/20191226204431854_16296.png)]

假设只有两个输入x1,x2x_1,x_2,计算z=x1w1+x2w2+bz = x_1w_1 + x_2w_2 + b得到zz后再代入激活函数,经过多次运算会得到最终的输出y1,y2y_1,y_2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nKqVbw2D-1577369599079)(_v_images/20191226204622410_15098.png)]

现在问题是如何计算损失(距离函数)CCww的偏微分Cw\frac{\partial C}{\partial w}

利用链式求导法

Cw=Czzw \frac{\partial C}{\partial w} = \frac{\partial C}{\partial z} \frac{\partial z}{\partial w}

计算zw\frac{\partial z}{\partial w}的过程叫做正向过程(Forward pass);计算Cz\frac{\partial C}{\partial z}的过程叫做反向过程(Backward pass)

正向过程

z=x1w1+x2w2+bz = x_1w_1 + x_2w_2 + b

zw1=x1zw2=x2 \frac{\partial z}{\partial w_1} = x_1 \\ \frac{\partial z}{\partial w_2} = x_2 \\
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I2a9Z4Ic-1577369599079)(_v_images/20191226205915655_32463.png)]

如上图所示,假设输入是1,11,-1,上面蓝色神经元的参数:w1=1,w2=2,b=1w_1=1,w_2=-2,b=1,激活函数是Sigmoid函数;
下面蓝色神经元的参数:w1=1,w2=1,b=0w_1=-1,w_2=1,b=0

对下面的神经元来说,计算w2w_2的偏微分,可以很快得出zw=1\frac{\partial z}{\partial w} = -1,也就是输入x2(1)x_2(-1),随着从前往后计算每个神经元的输出,整个过程就可以很快结束,因此叫正向过程。

反向过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PYFLvzls-1577369599079)(_v_images/20191226210813603_16863.png)]

困难的是如何计算Cz\frac{\partial C}{\partial z}

a=11+eza = \frac{1}{1+e^{-z}}

假设激活函数是Sigmoid函数a=σ(z)a=\sigma(z),然后得到的函数值aa会乘上某个权重(比如w3w_3)再加上其他值得到zz^\prime(注意这里只是一个符号,不是zz的导数);aa也会乘上权重(比如w4w_4)再加上其他东西得到zz^{\prime\prime}(注意这里只是一个符号,不是zz的二阶导数);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IwHcHWyr-1577369599080)(_v_images/20191226211217380_32053.png)]

Cz=Caaz \frac{\partial C}{\partial z} = \frac{\partial C}{\partial a} \frac{\partial a}{\partial z}

可以这样理解,zz通过影响aa来影响CC

az=σ(z)z=σ(z) \frac{\partial a}{\partial z} = \frac{\partial \sigma(z)}{\partial z} = \sigma^\prime(z)

那就剩下

Ca=Czza+Czza \frac{\partial C}{\partial a} = \frac{\partial C}{\partial z^\prime}\frac{\partial z^\prime}{\partial a} + \frac{\partial C}{\partial z^{\prime\prime}}\frac{\partial z^{\prime\prime}}{\partial a}

改变了aa会改变zz^{\prime}zz^{\prime\prime},从而改变了CC

我们先计算简单的

z=aw3+z^{\prime} = aw_3 + \cdots


za=w3\frac{\partial z^{\prime}}{\partial a} = w_3

同理

za=w4\frac{\partial z^{\prime\prime}}{\partial a} = w_4

现在难点就是Cz\frac{\partial C}{\partial z^\prime}Cz\frac{\partial C}{\partial z^{\prime\prime}}

我们这里先假装我们知道这两项的值。然后整理下原来的式子:

Cz=σ(z)[w3Cz+w4Cz] \frac{\partial C}{\partial z} = \sigma^\prime(z)[w_3\frac{\partial C}{\partial z^\prime} + w_4\frac{\partial C}{\partial z^{\prime\prime}}]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I7cjk4Ly-1577369599080)(_v_images/20191226214024450_27012.png)]

假设有另外一个特殊的神经元,它是上图的样子,输入就是Cz\frac{\partial C}{\partial z^\prime}Cz\frac{\partial C}{\partial z^{\prime\prime}},它们分别乘以w3w_3w4w_4,然后求和得到的结果再乘上σ(z)\sigma^\prime(z)
就得到了Cz\frac{\partial C}{\partial z}

zz在正向传播的过程中已经知道了,因此这里的σ(z)\sigma^\prime(z)是一个常数。

说了这么多,还是没说怎么计算Cz\frac{\partial C}{\partial z^\prime}Cz\frac{\partial C}{\partial z^{\prime\prime}}啊。别急,下面就开始计算。

这里要分两种情况考虑:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BiSbf5tC-1577369599080)(_v_images/20191226214926144_15098.png)]

情形一: 红色的两个神经元就是输出层,它们能直接得到输出。

根据链式法则有:

Cz=y1zCy1 \frac{\partial C}{\partial z^\prime} = \frac{\partial y_1}{\partial z^\prime}\frac{\partial C}{\partial y_1}

只要知道激活函数是啥就能计算出y1z\frac{\partial y_1}{\partial z^\prime}

Cy1\frac{\partial C}{\partial y_1}也可以根据我们选取的损失函数简单的计算出来。

同理Cz\frac{\partial C}{\partial z^{\prime\prime}}的计算也一样

情形二:红色的不是输出层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RM7wSAxA-1577369599081)(_v_images/20191226220033042_12662.png)]

红色的是中间层,它们的激活函数的值会当成下一层的输入继续参数计算。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UefOrgCj-1577369599081)(_v_images/20191226220203239_4057.png)]

如果我们知道Cza\frac{\partial C}{\partial z_a}Czb\frac{\partial C}{\partial z_b}

同理(回顾一下上面那个特殊的神经元)我们就可以计算Cz\frac{\partial C}{\partial z^{\prime}}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p2J9i11V-1577369599081)(_v_images/20191226220512917_26589.png)]

问题就会这样反复循环下去,我们不停的看下一层,直到遇到了输出层。然后就可以由输出层往前计算出整个NN的所有的参数。

那我们为何不换个角度考虑问题,我们直接先算输出层的偏微分,然后依次往前计算。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ORibfTTy-1577369599081)(_v_images/20191226221214641_7228.png)]

这就是反向传播算法的思想。

2018-08-03 11:12:07 aaon22357 阅读数 4993
  • 深度学习基础教程

    接触数据挖掘的算法多年,近一两年开始用到深度学习的算法.我也是从0开始一点一点学的,在学习的过程中感觉现在的教程不太适合初学者,现有的教程或书,要么是大堆的数学公式,吓跑初学者,要么是大堆的代码淹死初学者,要么是大堆的理论比喻,迷惑初学者,要么是大堆很牛的东西(没有参考文献),打击初学者.我觉得,把数学原理弄明白,再能用代码实现算法,这是主要的,这个课程就是为了帮助初学者实现这个目的.

    2378 人正在学习 去看看 执著

深度学习领域小白一只,刚开始看论文半个月,把自己看论文的思路记下来,方便以后回顾和总结~

2018.07.27
TLD是传统算法,没有用到深度学习,
DLT是第一个将深度学习成功应用于目标跟踪领域的算法,SO-DLT是它的改进版,
SO-DLT和FCNT都是纯深度的,端到端的跟踪,其中FCNT中使用了不同层的特征获取不同level的信息用来跟踪,不过时间久远了。。。
HCF是深度特征+传统算法(粒子滤波),其中深度特征部分使用了三层特征来提取深度特征
MDNet是纯深度算法,自己构建了一个简单的CNN,不过速度慢。
SO-DLT和MDNet都是预训练+SGD在线微调

传统跟踪算法(correlation filters)速度快,很容易做到实时,但是鲁棒性没有深度算法好,深度算法往往运算量大,而且因为很多都用到了在线微调,所以速度慢。

--------------------------------------------------------------------分割线----------------------------------------------------------------------------

2018.08.03
说一下最近看的几篇,以及和师兄交流的心得~
传统算法MOSSE帧率669fps,KCF帧率292fps(来自论文EAST,ICCV2017 spotlight)
SANet是基于MDNet的基础上进行改进的,精度很高,但是速度才1fps,不能达到实时要求的算法基本不要考虑了,不实用。
VITAL(CVPR2018):使用了GAN来扩充正样本数量,还用了高阶敏感损失函数,减小简单负样本对于分类器训练的影响,是基于CREST(ICCV2017,spotlight)的改进版。
深度算法中的GOTURN速度很快,165fps,精度还没查,不知道~~
ROLO(2016ArXiv):YOLO+LSTM

孪生网络SiamFC(ECCV2016,基于模板匹配的,不需要在线微调,86fps)很实用,这两年基于SiamFC的改进版很火,感觉这是一个很好的方向,改进版主要有以下几篇:
CFNet(CVPR2017):和SiamFC同作者,不过CFNet又将相关滤波的理论在神经网络里构建了一个层,实现了端到端(数学功底相当强),膜拜大神
RFL(ICCV2017):用到了LSTM,思路但是精度并没有提升多少。。。
EAST(ICCV2017):正在看,下次来更新。。。
PTAV(ICCV2017):(思路很好)在速度和精度上达到一种平衡。将 tracking 过程分解为两个并行但是相互协作的线程(Thread):一个用于快速的跟踪,另一个用于准确的验证

CVPR2018有四篇都是SiamFC的改进版,
SINT++(CVPR2018):除了使用SiamFC的基础上,还提出了PSGN(positive sample generation network)扩充正样本数量,HPTN(hard positive transformation network)来生成更加有挑战性的正样本。
SiamRPN:SiamFC + RPN Network,输出两个分支,分别用于分类和回归(SiamFC没有回归,而是用多尺度测试),帧率160fps(不需要在线微调),端到端,单目标跟踪
RASNet:将特征学习和判别学习分离(原始的SiamFC是通过ϕ(.)\phi(.)函数来同时学习这两个的,作者说这样容易过拟合,CFNet虽然加了循环矩阵,但是引入了边界效应),在模板分支中(检测分支没有变) 添加了三个attention机制,首先使用General attention来学习所有训练样本的普适特征,Residual attention分支用来学习当前帧和普适特征的区别,二者求和就是当前帧的特征。还使用了一个channel attention分支对特征进行加权。
SA-Siam:
后面这两篇还没有看,等看完了再来更新~~

-----------------------------------------------------------------分割线--------------------------------------------------------------------------------------

今天看到了一个比较好的总结,在此记录一下~

Tracker AUC Precision OS (%) DP(%) CLE (pixel) FPS Deep Learning
MDNet 0.70767 0.94803 - - - - Y
C-COT 0.6725 0.89912 - - - - N
SINT+ 0.65517 0.88157 - - - Y
SRDCFdecon 0.65257 0.86967 - - - - N
MUSTer 0.64107 0.86458 - - - - N
DeepSRDCF 0.64073 0.84881 - - - - Y
SINT 0.63495 0.85064 - - - Y
LCT 0.62786 0.84802 - - - - N
SRDCF 0.6262 0.83795 - - - - N
SiamFC 0.61217 0.81532 - - - - Y
SiamFC_{3s} 0.60829 0.80922 - - - - Y
CF2 0.60466 0.8907 - - - - Y
HDT 0.60279 0.88853 - - - - Y
Staple 0.59952 0.79256 - - - - N
FCNT 0.59902 0.85587 - - - - Y
CNN-SVM 0.5971 0.85159 - - - - Y
SCT 0.59526 0.84546 - - - - Y
DLSSVM 0.58915 0.82884 - - - - Y
SAMF 0.57935 0.78495 - - - - N
RPT 0.57694 0.8045 - - - - N
MEEM 0.56596 0.83004 - - - - N
DSST 0.55386 0.73705 - - - - N
CNT 0.54475 0.72309 - - - Y
TGPR 0.5294 0.76612 - - - - N
KCF 0.5138 0.73999 - - - - N

以后会慢慢把每篇论文的阅读笔记发上来的~

最后附上一个很好的链接:https://javascript.ctolib.com/foolwood-benchmark_results.html#articleHeader6

2019-07-25 09:22:08 weixin_43612023 阅读数 689
  • 深度学习基础教程

    接触数据挖掘的算法多年,近一两年开始用到深度学习的算法.我也是从0开始一点一点学的,在学习的过程中感觉现在的教程不太适合初学者,现有的教程或书,要么是大堆的数学公式,吓跑初学者,要么是大堆的代码淹死初学者,要么是大堆的理论比喻,迷惑初学者,要么是大堆很牛的东西(没有参考文献),打击初学者.我觉得,把数学原理弄明白,再能用代码实现算法,这是主要的,这个课程就是为了帮助初学者实现这个目的.

    2378 人正在学习 去看看 执著

本文首发自 easyAI - 人工智能知识库
原文地址:《一文看懂深度学习(白话解释+8个优缺点+4个典型算法)

一文看懂深度学习

深度学习有很好的表现,引领了第三次人工智能的浪潮。目前大部分表现优异的应用都用到了深度学习,大红大紫的 AlphaGo 就使用到了深度学习。

本文将详细的给大家介绍深度学习的基本概念、优缺点和主流的4个典型算法。

深度学习、神经网络、机器学习、人工智能的关系

深度学习、机器学习、人工智能

简单来说:

  1. 深度学习是机器学习的一个分支(最重要的分支)
  2. 机器学习是人工智能的一个分支

深度学习、机器学习、人工智能的关系

目前表现最好的一些应用大部分都是深度学习,正是因为深度学习的突出表现,引发了人工智能的第三次浪潮。详情可以看《人工智能的发展史——3次 AI 浪潮

深度学习、神经网络

深度学习的概念源于人工神经网络的研究,但是并不完全等于传统神经网络。

不过在叫法上,很多深度学习算法中都会包含"神经网络"这个词,比如:卷积神经网络、循环神经网络。

所以,深度学习可以说是在传统神经网络基础上的升级,约等于神经网络。

深度学习和神经网络的关系

大白话解释深度学习

看了很多版本的解释,发现李开复在《人工智能》一书中讲的是最容易理解的,所以下面直接引用他的解释:

我们以识别图片中的汉字为例。

假设深度学习要处理的信息是“水流”,而处理数据的深度学习网络是一个由管道和阀门组成的巨大水管网络。网络的入口是若干管道开口,网络的出口也是若干管道开口。这个水管网络有许多层,每一层由许多个可以控制水流流向与流量的调节阀。根据不同任务的需要,水管网络的层数、每层的调节阀数量可以有不同的变化组合。对复杂任务来说,调节阀的总数可以成千上万甚至更多。水管网络中,每一层的每个调节阀都通过水管与下一层的所有调节阀连接起来,组成一个从前到后,逐层完全连通的水流系统。

深度学习类似一个水流系统

那么,计算机该如何使用这个庞大的水管网络来学习识字呢?

比如,当计算机看到一张写有“田”字的图片,就简单将组成这张图片的所有数字(在计算机里,图片的每个颜色点都是用“0”和“1”组成的数字来表示的)全都变成信息的水流,从入口灌进水管网络。

深度学习-将图片数字化

我们预先在水管网络的每个出口都插一块字牌,对应于每一个我们想让计算机认识的汉字。这时,因为输入的是“田”这个汉字,等水流流过整个水管网络,计算机就会跑到管道出口位置去看一看,是不是标记由“田”字的管道出口流出来的水流最多。如果是这样,就说明这个管道网络符合要求。如果不是这样,就调节水管网络里的每一个流量调节阀,让“田”字出口“流出”的水最多。

这下,计算机要忙一阵了,要调节那么多阀门!好在计算机的速度快,暴力的计算加上算法的优化,总是可以很快给出一个解决方案,调好所有阀门,让出口处的流量符合要求。

深度学习-识别田字

下一步,学习“申”字时,我们就用类似的方法,把每一张写有“申”字的图片变成一大堆数字组成的水流,灌进水管网络,看一看,是不是写有“申”字的那个管道出口流水最多,如果不是,我们还得再调整所有的阀门。这一次,要既保证刚才学过的“田”字不受影响,也要保证新的“申”字可以被正确处理。

深度学习-学习申字

如此反复进行,知道所有汉字对应的水流都可以按照期望的方式流过整个水管网络。这时,我们就说,这个水管网络是一个训练好的深度学习模型了。当大量汉字被这个管道网络处理,所有阀门都调节到位后,整套水管网络就可以用来识别汉字了。这时,我们可以把调节好的所有阀门都“焊死”,静候新的水流到来。

深度学习-学习所有汉字

与训练时做的事情类似,未知的图片会被计算机转变成数据的水流,灌入训练好的水管网络。这时,计算机只要观察一下,哪个出水口流出来的水流最多,这张图片写的就是哪个字。

深度学习大致就是这么一个用人类的数学知识与计算机算法构建起来的整体架构,再结合尽可能多的训练数据以及计算机的大规模运算能力去调节内部参数,尽可能逼近问题目标的半理论、半经验的建模方式。

传统机器学习 VS 深度学习

传统机器学习和深度学习的相似点

传统机器学习和深度学习的相似点

在数据准备和预处理方面,两者是很相似的。

他们都可能对数据进行一些操作:

  • 数据清洗
  • 数据标签
  • 归一化
  • 去噪
  • 降维

对于数据预处理感兴趣的可以看看《AI 数据集最常见的6大问题(附解决方案)

传统机器学习和深度学习的核心区别

传统机器学习和深度学习的核心区别

传统机器学习的特征提取主要依赖人工,针对特定简单任务的时候人工提取特征会简单有效,但是并不能通用。

深度学习的特征提取并不依靠人工,而是机器自动提取的。这也是为什么大家都说深度学习的可解释性很差,因为有时候深度学习虽然能有好的表现,但是我们并不知道他的原理是什么。

深度学习的优缺点

深度学习的优缺点

优点1:学习能力强

从结果来看,深度学习的表现非常好,他的学习能力非常强。

优点2:覆盖范围广,适应性好

深度学习的神经网络层数很多,宽度很广,理论上可以映射到任意函数,所以能解决很复杂的问题。

优点3:数据驱动,上限高

深度学习高度依赖数据,数据量越大,他的表现就越好。在图像识别、面部识别、NLP 等部分任务甚至已经超过了人类的表现。同时还可以通过调参进一步提高他的上限。

优点4:可移植性好

由于深度学习的优异表现,有很多框架可以使用,例如 TensorFlowPytorch。这些框架可以兼容很多平台。

缺点1:计算量大,便携性差

深度学习需要大量的数据很大量的算力,所以成本很高。并且现在很多应用还不适合在移动设备上使用。目前已经有很多公司和团队在研发针对便携设备的芯片。这个问题未来会得到解决。

缺点2:硬件需求高

深度学习对算力要求很高,普通的 CPU 已经无法满足深度学习的要求。主流的算力都是使用 GPU 和 TPU,所以对于硬件的要求很高,成本也很高。

缺点3:模型设计复杂

深度学习的模型设计非常复杂,需要投入大量的人力物力和时间来开发新的算法和模型。大部分人只能使用现成的模型。

缺点4:没有"人性",容易存在偏见

由于深度学习依赖数据,并且可解释性不高。在训练数据不平衡的情况下会出现性别歧视、种族歧视等问题。

4种典型的深度学习算法

4种典型的深度学习算法

卷积神经网络 - CNN

CNN 的价值:

  1. 能够将大数据量的图片有效的降维成小数据量(并不影响结果)
  2. 能够保留图片的特征,类似人类的视觉原理

CNN 的基本原理:

  1. 卷积层 – 主要作用是保留图片的特征
  2. 池化层 – 主要作用是把数据降维,可以有效的避免过拟合
  3. 全连接层 – 根据不同任务输出我们想要的结果

CNN 的实际应用:

  1. 图片分类、检索
  2. 目标定位检测
  3. 目标分割
  4. 人脸识别
  5. 骨骼识别

了解更多《一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用)

循环神经网络 - RNN

RNN 是一种能有效的处理序列数据的算法。比如:文章内容、语音音频、股票价格走势…

之所以他能处理序列数据,是因为在序列中前面的输入也会影响到后面的输出,相当于有了“记忆功能”。但是 RNN 存在严重的短期记忆问题,长期的数据影响很小(哪怕他是重要的信息)。

于是基于 RNN 出现了 LSTM 和 GRU 等变种算法。这些变种算法主要有几个特点:

  1. 长期信息可以有效的保留
  2. 挑选重要信息保留,不重要的信息会选择“遗忘”

RNN 几个典型的应用如下:

  1. 文本生成
  2. 语音识别
  3. 机器翻译
  4. 生成图像描述
  5. 视频标记

了解更多《一文看懂循环神经网络-RNN(独特价值+优化算法+实际应用)

生成对抗网络 - GANs

假设一个城市治安混乱,很快,这个城市里就会出现无数的小偷。在这些小偷中,有的可能是盗窃高手,有的可能毫无技术可言。假如这个城市开始整饬其治安,突然开展一场打击犯罪的「运动」,警察们开始恢复城市中的巡逻,很快,一批「学艺不精」的小偷就被捉住了。之所以捉住的是那些没有技术含量的小偷,是因为警察们的技术也不行了,在捉住一批低端小偷后,城市的治安水平变得怎样倒还不好说,但很明显,城市里小偷们的平均水平已经大大提高了。

警察们开始继续训练自己的破案技术,开始抓住那些越来越狡猾的小偷。随着这些职业惯犯们的落网,警察们也练就了特别的本事,他们能很快能从一群人中发现可疑人员,于是上前盘查,并最终逮捕嫌犯;小偷们的日子也不好过了,因为警察们的水平大大提高,如果还想以前那样表现得鬼鬼祟祟,那么很快就会被警察捉住。为了避免被捕,小偷们努力表现得不那么「可疑」,而魔高一尺、道高一丈,警察也在不断提高自己的水平,争取将小偷和无辜的普通群众区分开。随着警察和小偷之间的这种「交流」与「切磋」,小偷们都变得非常谨慎,他们有着极高的偷窃技巧,表现得跟普通群众一模一样,而警察们都练就了「火眼金睛」,一旦发现可疑人员,就能马上发现并及时控制——最终,我们同时得到了最强的小偷和最强的警察。

同时得到了最强的小偷和最强的警察

了解更多《什么是生成对抗网络 - GAN?(基本概念+工作原理)

深度强化学习 - RL

强化学习算法的思路非常简单,以游戏为例,如果在游戏中采取某种策略可以取得较高的得分,那么就进一步「强化」这种策略,以期继续取得较好的结果。这种策略与日常生活中的各种「绩效奖励」非常类似。我们平时也常常用这样的策略来提高自己的游戏水平。

在 Flappy bird 这个游戏中,我们需要简单的点击操作来控制小鸟,躲过各种水管,飞的越远越好,因为飞的越远就能获得更高的积分奖励。

这就是一个典型的强化学习场景:

  • 机器有一个明确的小鸟角色——代理
  • 需要控制小鸟飞的更远——目标
  • 整个游戏过程中需要躲避各种水管——环境
  • 躲避水管的方法是让小鸟用力飞一下——行动
  • 飞的越远,就会获得越多的积分——奖励

游戏是典型的强化学习场景

你会发现,强化学习和监督学习、无监督学习 最大的不同就是不需要大量的“数据喂养”。而是通过自己不停的尝试来学会某些技能。

了解更多:《一文看懂什么是强化学习?(基本概念+应用场景+主流算法)

总结

深度学习属于机器学习的范畴,深度学习可以说是在传统神经网络基础上的升级,约等于神经网络。

深度学习和传统机器学习在数据预处理上都是类似的。核心差别在特征提取环节,深度学习由机器自己完成特征提取,不需要人工提取。

深度学习的优点:

  1. 学习能力强
  2. 覆盖范围广,适应性好
  3. 数据驱动,上限高
  4. 可移植性好

深度学习的缺点:

  1. 计算量大,便携性差
  2. 硬件需求高
  3. 模型设计复杂
  4. 没有"人性",容易存在偏见

深度学习的4种典型算法:

  1. 卷积神经网络 - CNN
  2. 循环神经网络 - RNN
  3. 生成对抗网络 - GANs
  4. 深度强化学习 - RL
2019-04-28 18:45:54 dengliming123 阅读数 152
  • 深度学习基础教程

    接触数据挖掘的算法多年,近一两年开始用到深度学习的算法.我也是从0开始一点一点学的,在学习的过程中感觉现在的教程不太适合初学者,现有的教程或书,要么是大堆的数学公式,吓跑初学者,要么是大堆的代码淹死初学者,要么是大堆的理论比喻,迷惑初学者,要么是大堆很牛的东西(没有参考文献),打击初学者.我觉得,把数学原理弄明白,再能用代码实现算法,这是主要的,这个课程就是为了帮助初学者实现这个目的.

    2378 人正在学习 去看看 执著

BP算法的推导


上一周我给大家带来了开发环境的部署,这一周我来给各位刚开始学习深度学习的人带来了核心算法BP算法的详细推导过程BP算法是在深度学习领域经常用到的算法,学好了BP算法会发现之后的卷积也就那么回事。
我看了大量的关于BP算法的博客,发现一个弊端,不同的人写的推导过程有差异,而同一个人写的又不能完全看懂,而我今天给大家带来的,只需要你五分钟便可以掌握BP算法!但是在此之前大家要先了解一下神经网络的基本结构,这一部分内容我会在下次博客里面进行补充
在这里插入图片描述
这是一个比较简单的神经网络了吧,一个输入层,一个隐藏层,一个输出层。X代表输入的特征,W代表每个数据的权重,b代表偏置
接下来来看看BP算法吧
这是我用mathtype写出来的BP算法

在此之前在接下来的BP算法中:
我们要用到一个叫做激活函数的东西,激活函数说简单点就是为了解决非线性分类的问题(这里大家不是很理解也没关系不影响后面学习)
常用的激活函数有:
tanh 双曲正切函数
在这里插入图片描述
求导也比较简单,中间一段变化较快,可以更快的训练模型,但是在两边变化率几乎为零
它的图像为:
在这里插入图片描述
sigmoid S型函数:
在这里插入图片描述
其值在 0-1之间并且求导比较简单,具有连续变化的特点
函数图像为:
在这里插入图片描述
还有其他的一些函数比如softmax函数,sign函数等等这里就不一 一介绍了,我们这里选择sigmoid函数作为激活函数
在这里插入图片描述
这里面涉及一些我还没有给大家提到过的东西,在下一次的博客我会为大家补上,或者大家可以先去其他地方了解一下这里我简单给大家提一下:
1.神经网络的基本结构(三层:输入层,隐藏层,输出层)
2. 链式求导(将原式子化为多个式子相乘)
3. 梯度(求偏导既为函数下降的方向)
4. 梯度下降的步长(既下降一次下降多少)
5. 激活函数:大家可能不怎么明白激活函数是怎么回事,这次博客我也没有详细介绍,说明白一点就是在隐藏层把加权求和加偏置得到的结果再进行一次非线性计算,为的是能更好地为非线性问题分类。上文我列举了两类常用激活函数,其他的激活函数大家可以下去了解一下,大家只要明白激活函数用来干嘛,在哪工作就行。
6. 损失函数:用来刻画通过模型预测得到的结果与真实值之间的差距,一般的损失函数有:均方误差还有交叉熵
说简单一点BP算法就是对W和b进行一次次的优化,也就是求偏导,求梯度。

欢迎大家留言:
如果大家觉得这一次博客里面用到的一些概念比如神经网路的基本结构,激活函数还有损失函数不明白的,觉得有必要讲解的话,那么我就单独写一次博客为大家讲解。

没有更多推荐了,返回首页