Eclipse市场下载、拖动到Eclipse下载插件处安装
http://marketplace.eclipse.org/marketplace-client-intro?mpc_install=3274405
版本1.8 Eclipse JDK打包
链接:https://pan.baidu.com/s/1eNYSU7_FSo-Hyyd6fEc4Fg 密码:qwm4
原文链接:
https://yq.aliyun.com/articles/581758 2018年区块链比历史任何一年都会火爆。自今年开始,区块链的概念开始走向中国大妈,备受韭菜关注。未来会不会像牛市那样崩盘呢?
我认为,区块链演化的三个隐喻,或许揭示了未来的发展的道路。
第一个隐喻:区块链是一朵莲花。
区块链技术脱胎于比特币这个带有原罪的淤泥,已经催生了两个不好的苗头,一方面,比特币受到政府打压。作为暗网非法交易的硬通货,比特币引起了世界各国政府的强烈关注。一些原本持有开放态度的政府也开始加以严格监管,高度的排斥比特币及其分叉。原因在于政府,担心其动辄百亿千亿元的庞大的匿名交易量会扰乱自身金融系统。但是,政府并非完全排斥数字加密货币,反而对自身能否发行数字货币保持浓厚兴趣,比如委内瑞拉发行“石油币”,以转移国内经济的压力。
另一方面,区块链技术存在着会被滥用的可能性。在一夜暴富神话的推动下,2017年来,链圈与币圈分裂,走上区块链独立发展的道路。但是,币圈摇身一变,也戴上了区块链的帽子,大力炒作各种代币。互联网、金融企业纷纷入场,而区块链概念股也经历了多个涨停,猛刮割韭菜之风,ICO制造的神话咆哮不已,背后其实是一副可怜兮兮的等大妈接盘的惨相。民众难以分清这些打着“区块链”旗号的项目中究竟有多少是真正采用了这一新技术,又有多少仅仅是“挂着链头卖币肉”。
凡是炒币的,通俗的说是让token跟法币直接兑换,就属于币圈,币圈谈的区块链,其实是如何分叉新颖的代币,收割更多呆逼。圈里牛人们擅长一种敏捷的转换术:今天在媒体上给某项目站台,遭遇危机后立马声称毫无关系。
莲花隐喻的背后暴露了币圈某些“高尚”的做派。
第二个隐喻,区块链是一组麻将。
这是2018年春节期间流行的一个段子,比较完整的内容是:1,四个矿工一组,先碰撞出13个数字正确哈希值的矿工可以获得记账权并得到奖励。2,不可篡改。因为说服其他三个人需要消耗太多算力和体力。3,典型的价值互联网。自己兜里的价值用不了八圈,就跑到他们兜里去了。4、去中心化,每个人都可以是庄,完全就是点对点。如此等等。
关于区块链本质是什么?麻将是一种戏谑的比喻,而作为“分布式账本”是一种比较中性而谨慎的说法,容易被各方所接受。
但是,分布式账本这种说法的也非常不足,如同当年把blog简单的理解为网络日记一样,完全忽视了blog作为自媒体的巨大威力。关于区块链的威力,人们看到的只是冰山的一角,媒体舆论在传播区块链概念的时候,不妨少些娱乐调侃,避开一夜暴富的神话,而进行其他的深层探讨。
第三个隐喻,区块链是一把屠龙刀。
宝刀屠龙,号令天下莫敢不从。链圈不炒币,链圈拥趸者相信,随着Token的普及,数字经济将会更加真实可信,经济社会由此变得更加公正和透明。
许多区块链的书里印着类似这样的文字,区块链带来的变革如同互联网革命。区块链的意义在于可以构建一个更加可靠的互联网系统,从根本上解决价值交换与转移中存在的欺诈和寻租现象。区块链还可以应用于更多领域,比如公共服务,2018年3月7日,非洲的塞拉利昂(Sierra Leone)举行了世界首个以区块链技术为基础的总统投票选举。
让人底气不足的是,链圈在普及概念的时候,宣传口径无一例外的都是那一套旧词,什么去中心化、防篡改、分布式、透明化等等,解决的问题,所举的案例,无非是一些小概率事件。
客户已经有足够的技术防范小概率事件,凭什么还要为小概率事件再买一次单?
宝刀已然在手,但龙在哪里?
链圈面面相觑,发现自己掉进了一个刚需不足的坑里。
怎么爬出来呢?创业公司步履蹒跚,巨头企业独辟蹊径,优先考虑建设基础设施。2018年,基础设施基本成熟了,因而区块链的应用落地具备了条件,会有大量的应用落地,应用场景从过去的FinTech、银行领域扩展到教育、健康、版权、行政、科学研究、交通等等多个领域。
寻找大龙,该是各家撕拼的重点方向。
总之,莲花是美丽的,但美丽的事物往往生命力不长久;麻将是娱乐而形象的,需要更加深刻些。屠龙刀是有价值的,需要尽快找到用武之地,来发挥自身威力。
2018年,区块链技术将实现关键性突破,全领域生态级别的底层系统出现,区块链技术将全面应用到各个垂直行业。
人们很快会从神话中醒悟过来,未来的区块链应用将会是公有链、联盟链、私有链,与中心化服务兼容的混合架构。未来的区块链需要接受一定监管,各种security token、utility token会和国家发行并信用背书的token和平共处。
在现实面前,去中心化的技术将因优化中心的存在而实现自身价值,这是区块链技术存在的社会意义。
原文发布时间为:2048-03-20
本文作者:张笑容 本文来源:钛媒体,如需转载请联系原作者。
DevTools Theme: Zero Dark Matrix – Chrome Web Store
chrome的控制台组件,先看下效果:
安装:
1.chrome 软件中心 搜索Zero Dark Matrix
2.添加到扩展
3.控制台开启allow custom UI themes
4.重启控制台
5.enjoy
详细文档说明参考github :
https://github.com/mauricecruz/chrome-devtools-zerodarkmatrix-theme
算法岗计算机视觉方向求职经验总结
进入11月份,楼主找工作也基本进入尾声了,从7月份开始关注牛客网,在求职的过程中学到了不少,感谢牛客提供这样一个平台,让自己的求职历程不再孤单。
先说一下楼主教育背景,本科西部末流985,研究生调剂到帝都某文科学校.专业都是CS专业,求职方向都是计算机视觉算法。有某外企以及二线互联网实习经历,本科虽然CS出身,但实际动手能力并不强。研究生的研究方向并不是计算机视觉方向。实习的时候开始接触计算机视觉,自己比较感兴趣,开始转CV方向。回想这几个月的求职经历,其中的辛苦只有自己知道。最终拿到了百度SP,京东SSP,美团无人驾驶SP,顺丰科技SP,拼多多SP,以及虹软SP,思科,中电29等offer。 想把我学习与求职路上的一些心得告诉学弟学妹们。 1.一定要有一门自己比较熟悉的语言。 我由于使用C++比较多,所以简历上只写了C++。C++的特性要了解,C++11要了解一些,还有STL。面试中常遇到的一些问题,手写代码实现一个string类,手写代码实现智能指针类,以及STL中的容器的实现机制,多态和继承,构造函数, 析构函数等。推荐看一下网易云课堂翁恺老师的C++的视频以及经典的几本书。 2.一定要刷题 楼主主要刷了剑指offer以及leetcode上的easy,middle的题目。如果编程能力不是很强,推荐可以分类型进行刷题,按照tag来刷,对于某一类型的题目,可以先看一下该算法的核心思想,然后再刷题。楼主在求职的过程中,遇到好多跟leetcode上类似的题目,刷题的目的不是为了碰见原题,而是为了熟练算法。当然能够碰见原题最好不过啦。 3.机器学习的一些建议 推荐西瓜书,以及李航老师的统计学方法。另外熟悉一种深度学习框架。学习计算机,一定要实战,毕竟只有在实战的过程中,才能懂得更透彻。可以多参加一些比赛,比如kaggle,天池,滴滴的一些比赛。这对找工作的用处很大。
4.能实习就尽量实习。 如果导师是学术大牛,可以带你发顶会的论文,并且自己对方向比较感兴趣,那可以在实验室待着好好搞科研。如果你研究生的研究方向跟你以后的求职方向不一致,建议早点出来实习,找个对口的实习,实习才能发现,实际工作和在学校学习的东西差距比较大。
楼主能不能分享下面试问了哪些视觉的问题啊
问到的问题主要跟我实习做的东西有关,有关于视频拆分的一些算法,以及三维点云的一些问题,传统的图像处理的一些基本操作还是要了解的,比如滤波,边缘检测,以及常用的一些传统的特征,SIFT,SURF,HOG等。深度学习这方面,我主要做过目标检测,所以问到的就是rcnn,fast-rcnn,faster-rnn,yolo,ssd这些算法。另外,问过一些调参,正则化,Batch normalization,drop out,激活函数的选择。手动推导BP,LR,SVM,算法题主要有常规的排序,二分查找,BP相关的题目,还有一些就是关于二叉树的递归和非递归遍历,层次遍历,最近公共祖先等,其余的题目记得不太清楚了
深度学习面经
(1)代码题(leetcode类型),主要考察数据结构和基础算法,以及代码基本功
虽然这部分跟机器学习,深度学习关系不大,但也是面试的重中之重。基本每家公司的面试都问了大量的算法题和代码题,即使是商汤、face++这样的深度学习公司,考察这部分的时间也占到了我很多轮面试的60%甚至70%以上。我去face++面试的时候,面试官是residual net,shuffle net的作者;但他们的面试中,写代码题依旧是主要的部分。
大部分题目都不难,基本是leetcode medium的难度。但是要求在现场白板编程,思路要流畅,能做到一次性Bug-free. 并且,一般都是要给出时间复杂度和空间复杂度最优的做法。对于少数难度很大的题,也不要慌张。一般也不会一点思路也没有,尽力给面试官展现自己的思考过程。面试官也会引导你,给一点小提示,沿着提示把题目慢慢做出来也是可以通过面试的。
以下是我所遇到的一些需要当场写出完整代码的题目: <1> 二分查找。分别实现C++中的lower_bound和upper_bound. <2> 排序。 手写快速排序,归并排序,堆排序都被问到过。 <3> 给你一个数组,求这个数组的最大子段积 时间复杂度可以到O(n) <4> 给你一个数组,在这个数组中找出不重合的两段,让这两段的字段和的差的绝对值最大。 时间复杂度可以到O(n) <5> 给你一个数组,求一个k值,使得前k个数的方差 + 后面n-k个数的方差最小
时间复杂度可以到O(n) <6> 给你一个只由0和1组成的字符串,找一个最长的子串,要求这个子串里面0和1的数目相等。 时间复杂度可以到O(n) <7> 给你一个数组以及一个数K, 从这个数组里面选择三个数,使得三个数的和小于等于K, 问有多少种选择的方法? 时间复杂度可以到O(n^2) <8> 给你一个只由0和1组成的矩阵,找出一个最大的子矩阵,要求这个子矩阵是方阵,并且这个子矩阵的所有元素为1 时间复杂度可以到O(n^2) <9> 求一个字符串的最长回文子串 时间复杂度可以到O(n) (Manacher算法) <10> 在一个数轴上移动,初始在0点,现在要到给定的某一个x点, 每一步有三种选择,坐标加1,坐标减1,坐标乘以2,请问最少需要多少步从0点到x点。 <11> 给你一个集合,输出这个集合的所有子集。 <12> 给你一个长度为n的数组,以及一个k值(k < n) 求出这个数组中每k个相邻元素里面的最大值。其实也就是一个一维的max pooling 时间复杂度可以到O(n) <13> 写一个程序,在单位球面上随机取点,也就是说保证随机取到的点是均匀的。 <14> 给你一个长度为n的字符串s,以及m个短串(每个短串的长度小于10),每个字符串都是基因序列,也就是说只含有A,T,C,G这四个字母。在字符串中找出所有可以和任何一个短串模糊匹配的子串。模糊匹配的定义,两个字符串长度相等,并且至多有两个字符不一样,那么我们就可以说这两个字符串是模糊匹配的。
HTML颜色的表示 HTML 颜色由红色、绿色、蓝色混合而成。
HTML颜色可以通过颜色值或者颜色RGB或者颜色名来引用。
sublime text3自带取色器可以用,右键 > insert color with color picker就可以从color picker取色了。
颜色值 HTML 颜色由一个十六进制符号来定义,这个符号由红色、绿色和蓝色的值组成(RGB)。每种颜色的最小值是0(十六进制:#00)。最大值是255(十六进制:#FF)。
十六进制值的写法为#号后跟三个或六个十六进制字符。三位数表示法为:#RGB,转换为6位数表示为:#RRGGBB。
如
颜色 3位十六进制颜色值 6位十六进制颜色值 RGB #000 #000000 rgb(0,0,0) 这个表格给出了由三种颜色混合而成的具体效果:
颜色(Color) 颜色十六进制(Color HEX) 颜色RGB(Color RGB) #000000 rgb(0,0,0) #FF0000 rgb(255,0,0) #00FF00 rgb(0,255,0) #0000FF rgb(0,0,255) #FFFF00 rgb(255,255,0) #00FFFF rgb(0,255,255) #FF00FF rgb(255,0,255) #C0C0C0 rgb(192,192,192) #FFFFFF rgb(255,255,255) 颜色RGB:透明度 相对于使用rgb(255,255,0),使用rgba(255,255,0,0.5)可以实现设置颜色透明度的功能,这里的0.5表示透明度,范围0~1。 style="background-color:rgba(255,255,0,0.25)"> 通过 rbg 值设置背景颜色
颜色名 141个颜色名称是在HTML和CSS颜色规范定义的(17标准颜色,再加124)。下表列出了所有颜色的值,包括十六进制值。目前所有浏览器都支持以下颜色名。
: 17标准颜色:黑色,蓝色,水,紫红色,灰色,绿色,石灰,栗色,海军,橄榄,橙,紫,红,白,银,蓝绿色,黄色。点击其中一个颜色名称(或一个十六进制值)就可以查看与不同文字颜色搭配的背景颜色。
某小皮
不同颜色的展示
1600万种不同颜色 三种颜色 红,绿,蓝的组合从0到255,一共有1600万种不同颜色(256 x 256 x 256)。
在下面的颜色表中你会看到不同的结果,从0到255的红色,同时设置绿色和蓝色的值为0,随着红色的值变化,不同的值都显示了不同的颜色。
vtk是著名的开源三维渲染库,在三维渲染过程中的一个非常重要的内容就是相机即vtkCamera类的设置。在VTK中,相机的实质是一个观测点。VTK的官方Doc对vtkCamera写的十分简略,暗坑很多。在学习和使用vtkCamera的过程中,我走了很多弯路。在我的应用中,我希望能够根据现实中相机的Transform Matrix完全模拟设置vtkCamera。下面根据我的经验和理解,介绍一下vtkCamera,希望对被人能有帮助。
vtkCamera参数 上图是vtkCamera模型示意图,虽然这个图来自于另一个3D库的文档,但是原理一样。要注意的是虽然左边画了个摄像机,但是其实图示的包括焦点在内都是在相机内部的。下面利用这个图来解释一下vtkCamera的各个成员变量的含义。
WindowCenter WindowCenter按照字面意思是窗口的中心。在相机制造过程中难免存在一定的装配误差,所以透镜的中心往往不能完全对准传感器的中心,而是有非常微小的误差。所以我们在用vtk相机模拟现实中相机时也应该体现这一现象。WindowCenter实质上就是成像的一个offset偏移量。在vtk中WindowCenter的坐标范围是([-1,+1], [-1,+1])。比方说,如果理想情况,图像成像中心(Focal Point)就在窗口的中心,那么WindowCenter就是(0, 0)。如果希望把成像平移到窗口的右上角,那么就应该设置成(1, 1)。根据官方文档,这个量一般在同一窗口显示多个渲染器时才需要设置。但实际上,如果你需要vtk完全模拟现实相机,也要考虑设置这个量,否则永远有一个偏移量。反过来,如果希望图像平移也可以修改这个参数。
这里要注意的是,WindowCenter的正方向是向右向上的。而成像平面的坐标系往往是向右向下的。小心正负号的设置。另外,平移的对象是图像,而不是在三维空间移动相机。
FocalPoint FocalPoint即焦点位置。在现实相机中焦点在成像平面中心,即在光心的后面(与被摄物体在光心的两侧)。但是在建模时为了简化我们往往对称到光心前面(与被摄物体在光心同侧)。注意这里要求的是焦点的三维坐标,而不仅仅是焦距。因为焦点不仅确定了成像平面的位置,还与光心位置Position一同确定了相机镜头的朝向。
Position 这里的Position指的实际上是光心的位置,或者说对应小孔相机模型中小孔的位置。
ViewUp ViewUp指图像的正方向。由Position和FocalPoint我们可以确定5个自由度,相机仍然可以沿着主光轴任意旋转。所以这里要指定正方向,即ViewUp。这里注意,ViewUp是一个方向向量,不存在位置,或者说起点永远在原点。
ViewAngle ViewAngle是视角。默认是30°。其实这个是一个很重要的参数,它决定了图像中内容的比例大小。或者说,通过设置这一变量可以实现图像的放缩。
ClippingRange ClippingRange即剪切平面,分为前后两个。只有在这两个剪切平面之间的内容才会被渲染和显示。默认值是(0.1,1000)。这个量一般不需要修改,而是在vtkRenderer对象中调用ResetCameraClippingRange()方法来自动重设渲染范围。如果你的图像显示不完整,但是稍微用鼠标旋转或平移一下又变完整了。建议试一下调用一次这个方法。
ParallelProjection 如果为True那么按照平行投影进行渲染,否则默认是按照透视投影PerspectiveProjection进行渲染。透视投影即近大远小的投影,平行投影即用平行光照射得到的投影,没有近大远小的透视效应。如图所示: DirectionOfProjection DirectionOfProjection即一个三维矢量,从光心位置Position指向焦点位置FocalPoint。
ViewPlaneNormal ViewPlaneNormal是投影面(成像面)的法向量。与DirectionOfProjection矢量正好相反。
Distance Distance即焦距,即上面两个向量的模长。如果使用SetDistance()会沿着主光轴移动焦点FocalPoint,从而使FocalPoint与Position达到给定距离。
ModelTransformMatrix 这个变换矩阵将移动场景里除了相机的所有物体,然后渲染。理论上可以通过“ 相机不动物体动” 获得与 “物体不动相机动”一样的图片。但是标准的方法应该还是使相机移动,这样更符合实际。
ViewTransform 这个矩阵是相机矩阵的逆矩阵。相机矩阵是相机坐标系(原点Position,Z轴指向FocalPoint,Y轴与ViewUp平行)相对于世界坐标系的位置,而这个矩阵是世界坐标系相对于相机坐标系的位置。如果相机矩阵 T=[0R00t1]
T
=
[
R
t
0
0
0
1
]
那么ViewTransform为
T−1=[0RT00−RTt1]
T
−
1
=
[
R
T
−
R
T
t
0
0
0
1
]
单位正交矩阵的逆等于其转置矩阵。
CameraLightTransform 当我们设置了Position,FocalPoint和ViewUp后就会得到一个唯一的变换矩阵(相机矩阵),即从世界坐标系到相机坐标系的坐标变换矩阵,这个相机也就确定了唯一的位置。假设设置另一个相机起始值为Positon = (0, 0, 1),FocalPoint = (0, 0, 0),ViewUp = (0, 1, 0)。对这个相机施加一个怎样的变换,才能得到我们目前当前相机矩阵。这个变换就是CameraLightTransform。
2006年8月5日,也就是今天我的博客点击率过了100万。没有想过会这么快,因为我只是一个普通的程序员。文字不能惊天地泣鬼神,自己也没有“脱”的资本与勇气。有点暗爽!想来想去,最该感谢还是sina提供的平台和广大的软件同行的支持。 这是我人生里的第一个100万。虽然博客是个虚拟的网络舞台,但对一个普通人来说,在博客里赚100万或许和在现实里赚100万有很多相通之处。在现实里,要想赚自己的第一桶金,首先要有能力,其次做人要真诚,讲信用;还要有技巧。在博客里不也一样吗?首先好的文字是吸引博友的关键,其次是要和其他博友建立良好的关系,互访互通;最后就是技巧,要懂得营销自己的博客。这样时间长了,自然会积聚很多人气。 茫然的大学生,失意的上班族,困惑的人们,如果你找不到更好的手段来释放自己,博客绝对是个很好的平台。这里有成功的商人、明星、作家,也有正在创业的人们,更有无数和你一样失意的人,来这里和彼此交流,收获的不仅属于现在,而是一辈子。
我会继续努力,争取能上排行榜,向1000万看齐,作为一个草根向Acosta的blog看齐!
DL框架之darknet:darknet的简介、安装、使用方法的详细攻略
目录
darknet的简介
darknet的安装
darknet的使用方法
1、YOLO: Real-Time Object Detection
2、ImageNet Classification
3、Nightmare
4、RNNs in Darknet
5、DarkGo: Go in Darknet
6、Train a Classifier on CIFAR-10
7、Hardware Guide: Neural Networks on GPUs (Updated 2016-1-30)
darknet的简介 Darknet is an open source neural network framework written in C and CUDA. It is fast, easy to install, and supports CPU and GPU computation.
For more information see the Darknet project website. For questions or issues please use the Google Group.
内容简介 算法已在多大程度上影响我们的生活?购物网站用算法来为你推荐商品,点评网站用算法来帮你选择餐馆,GPS 系统用算法来帮你选择好的路线,公司用算法来选择求职者……当机器最终学会如何学习时,将会发生什么?
不同于传统算法,现在悄然主导我们生活的是“能够学习的机器”,它们通过学习我们琐碎的数据,来执行任务;它们甚至在我们还没提出要求,就能完成我们想做的事。
什么是终极算法?
机器学习五大学派,每个学派都有自己的主算法,能帮助人们解决特定的问题。而如果整合所有这些算法的优点,就有可能找到一种“终极算法”,该算法可以获得过去、现在和未来的所有知识,这也必将创造新的人类文明。
你为什么必须了解终极算法?
不论你身处什么行业、做什么工作,了解终极算法都将带给你崭新的科学世界观,预测以后的科技发展,布局未来,占位未来!
作者简介 佩德罗 · 多明戈斯(Pedro Domingos),美国华盛顿大学计算机科学教授,加州大学欧文分校信息与计算机科学博士,在机器学习与数据挖掘方面著有200多部专业著作和数百篇论文。国际机器学习学会联合创始人,《机器学习》杂志编委会成员,JAIR 前副主编。美国人工智能协会院士(AAAI Fellow,国际人工智能界的最 高荣誉),荣获 SIGKDD 创新大奖(数据科学领域的最 高奖项)、斯隆奖(Sloan Fellowship)、美国国家科学基金会成就奖(NSF CAREER Award)、富布赖特奖学金、IBM 学院奖以及多个论文奖项。
本书内容 推荐序 作为一位机器学习领域研习10年以上的专业技术人员,我当初入行的时候没有想到,短短的10年间,这项技术会如此快速地改变众多行业,并影响全球数十亿用户生活的方方面面。在今天,当你用今日头条浏览新闻资讯的时候,当你用网易云音乐查看推荐歌单的时候,当你在百度搜索信息的时候,当你在互联网金融平台申请借款的时候,甚至在你调戏 Siri 和小冰的时候,其实都是其背后的机器学习算法在云端服务器中为你默默服务。但对于这样一种重要技术,市面上一直缺少一本适合普通读者的入门科普读物,而众多的专业书籍要求读者具备一定的高等数学和计算机基础算法知识,并不适合科普的需要。直到中信出版社的朋友将这本书的翻译稿推荐给我时,我欣慰地发现,这正是想了解一点机器学习的普通读者所需要的啊。本书的作者多明戈斯是华盛顿大学的终身教授,也是一位在机器学习领域具有20年研究经历的资深科学家。多明戈斯一直致力于融合各种机器学习算法的优势,提出一种可以解决所有应用问题的通用算法,即终极算法。在这本书里,作者详细地阐述了他的思路。其实我个人在阅读本书的过程中,始终对“终极算法”的提法充满怀疑。在我看来,机器学习作为人工智能领域的主流技术,在现实社会中一直以技术工具的面目为人所知。不同的技术流派和相应算法往往可以很好地解决一些问题,却对另一些问题一筹莫展。所谓的终极算法真的存在吗?如果存在,有价值吗?
可以拿内燃机举个例子,就我这个外行来说,也知道存在活塞式发动机、涡喷发动机、涡轴发动机、涡扇发动机、涡桨发动机、冲压发动机等不同种类的内燃机。不同的内燃机特性迥异,适用的工况也不尽相同。小到家用小汽车,大到导弹驱逐舰,人类制造的各种机动设备,都可以根据自己的效率需求、动力需求、寿命需求,乃至启动速度等多种需求维度选择发动机种类。如果有人非要搞个终极内燃机,并企图用这种内燃机替代现存的各类内燃机,为所有大大小小、需求不同的机动设备提供统一动力,估计大概率是要失败的。这种通用的终极内燃机如果能搞出来,在大部分领域肯定竞争不过各领域的专用内燃机,或者成本太高,或者能效太低。
带着这种疑问,我通篇读下来之后才发现作者的另一层用意。诚如作者所说,很多普通人可能没有意识到自己的生活中机器学习算法的影响已经无处不在,机器学习已经在逐渐接管现实世界。大众对这样一种技术的认知程度和该技术的重要性相比显得远远不够,在不远的未来,了解机器学习并有能力利用机器学习改进自己工作的人在职业发展上会具备巨大的优势。“不要和人工智能对抗,要让人工智能为你服务”是作者诚挚的忠告。而要利用好机器学习这个工具,并不一定需要读一个计算机博士学位,但有必要了解一些基本的概念,了解各种技术的优缺点和能力边界。正如一位称职的驾驶员不必了解具体怎么制造汽车发动机,但是对发动机的工作原理和种类还是需要略知一二的。因此,相比一板一眼地介绍机器学习的典型算法,作者设计了一个更引人入胜的套路:先抛出一个“是否存在一种终极算法”的问题,然后带着读者一章一章地回顾机器学习发展史上的重要流派和代表算法。每回顾一派,就鼓励读者思考终极算法应该如何借鉴这类算法的优点。好奇的普通读者带着疑问读完本书后,不论其是否相信终极算法的存在,至少对各类算法都会有一定的印象。以讨论终极算法为名,行科普之实,到这一步,我觉得作者的目的已经达到一半了。
另外,在文末作者还提到,无论终极算法是否存在,他希望这个大胆的问题能够激发部分读者的好奇,甚至被这个问题吸引成为机器学习的专业研究人员。确实,每一种学科都需要至高的理想驱动向前,就如同物理的大一统理论,当无数杰出的天才为一个终极问题孜孜以求时,就算这个问题本身在这些人的有生之年可能没有答案,但是这个学科一定会因为这些伟大的探索历程取得辉煌的进步。我想,这也许是作者因为对机器学习的热爱夹带的另一个私货吧。
作为今日头条的一位算法架构师,我倒是希望头条用户都能陷入作者的“圈套”,带着好奇心,好好读读这本书。如果大多数用户都能了解一些机器学习的基础知识,应该就能够更好地和推荐算法互动,不断把算法调教得更好,更符合自己真正的兴趣,而不会因为算法一开始推荐的内容不好就放弃这个产品。诚如作者所说,也许在未来,对应人类的心理学,也会出现机器心理学,了解一点机器人的心理,会让你和机器的互动更有效率,也会让机器更快地成为你忠实、不知疲倦的助手。
曹欢欢
今日头条首席算法构架师
序 你也许不知道,但机器学习就在你身边。当你把查询信息输入搜索引擎时,它确定该向你显示哪些搜索结果(包括显示哪些广告)。当你打开邮箱时,大部分垃圾邮件你无法看到,因为计算机已经把这些垃圾邮件过滤了。登录亚马逊网站购买一本书,或登录网飞(Netflix)公司网站观看视频,机器学习系统会推荐一些你可能喜欢的产品。脸书(Facebook)利用机器学习决定该向你展示哪些更新,推特(Twitter)也同样会决定显示哪些文章。你使用计算机的任何时候,都有可能涉及机器学习。
传统上认为,让计算机完成某件事情的唯一方法(从把两个数相加到驾驶飞机),就是非常详细地记录某个算法并解释其如何运行。但机器学习算法就不一样:通过从数据中推断,它们自己会弄明白做事方法。掌握的数据越多,它们的工作就越顺利。现在我们不用给计算机编程,它们自己给自己编程。
机器学习不仅存在于网络空间,它还存在于你每天的生活中:从你醒来到入睡,每时每刻无所不在。
早上7点你的收音机闹钟响起,播放的是你之前从未听过的歌曲,但你的确很喜欢这首歌。Pandora 电台(可免费根据你的喜好播放歌曲)的优势在于,根据你听的音乐,电台掌握了你的品位,就像你自己的 radiojock 账号一样。这些歌曲本身可能借助机器学习来播放。接下来你吃早餐,阅读早报。早报在几个小时前印好,利用学习算法,印刷过程经过仔细调整,以免报纸出现折痕。你房间的温度刚刚好,电费明显少了很多,因为你安装了 Nest 智能温控器。
你开车去上班,车持续调整燃油喷射和排气再循环,以达到最佳的油耗。你利用一个交通预报系统(Inrix)来缩短高峰时段上下班的时间,这当然能减缓你的压力。上班时,机器学习帮你克服信息超载。你利用数据立方体来汇总大量数据,从每个角度观察该立方体,获取最有用的信息。你要决定是采用布局方案A,还是采用布局方案 B,以便为网站带来更多的业务。网络学习系统会尝试两种布局方案,并给予反馈。你得对潜在供应商的网站进行调查,但网站的语言是外语。没关系,谷歌会自动为你翻译。E–mail 会自动分类并归入相应的文件夹,只把最重要的信息留在邮箱里,非常方便。文字处理软件帮你查找语法和拼写错误。你为即将到来的行程查找到一个航班,但决定推迟购买机票,因为必应旅行(Bing Travel)预测票价很快会下降。也许你没有意识到以上这些,要不是机器学习帮助你,你可能要马不停蹄地亲自做很多事情。
你在休息时间查看自己的共同基金,大部分基金利用学习算法来选股,其中的某些基金完全由学习系统运作。午餐时间到了,你走在大街上,想找个吃饭的地方,这时候用手机上的 Yelp 点评应用程序来帮助你。你的手机充满了学习算法,它们努力工作,改正拼写错误、理解口头指令、减少传输误差、识别条形码,还有其他很多事情。手机甚至可以预测你接下来会做什么,然后依此给出建议。例如,当你吃完午餐后,它会小心翼翼地提示你,下午和外地来访者的会面要推迟,因为她的航班延误了。
下班时夜幕已降临,你走向自己的车,机器学习会保证你的安全,监测停车场监控摄像头的录像,如果探测到可疑人的行动,它会提示不在场的安保人员。在回家路上,你在超市门口停车,走向超市货物通道,通道借助学习算法进行布置:该摆放哪些货物,通道末尾该展示哪些产品,洋葱番茄辣酱是否该放在调味酱区域,或是放在墨西哥玉米片旁边。你用信用卡付款。学习算法会向你发送信用卡支付提示,并在得到你的确认后完成支付。另外一个算法持续寻找可疑交易,如果它觉得你的卡号被盗,则会提示你。还有一种算法尝试评估你对这张卡的满意度,如果你是理想的客户但对服务不太满意,银行会在你决定换卡之前,为你提供更贴心的服务。
你回到家,走到信箱旁,发现有朋友的一封来信,这是通过能阅读手写地址的学习算法派送的。当然也会有垃圾来信,由另外的学习算法进行选择。你停留了一会儿,呼吸夜晚清新凉爽的空气。你所在城市的犯罪率明显下降了,因为警察开始使用统计算法来预测哪里的犯罪率最高,并在那里集中巡警力量。你和家人共享晚餐。市长出现在新闻里,你为他投票,因为选举那天,学习算法确定你为“关键未投票选民”之后,他亲自给你打了电话。吃完晚餐,你观看球赛,两支球队都借助统计学习来挑选队员。你也可能和孩子们在 Xbox 上玩游戏,Kinecta 学习算法确定你在哪里、在做什么。你在睡前吃药,医生通过学习算法的辅助来设定和检测吃药的最佳时间。医生也可能利用机器学习来帮你诊断疾病,例如,分析X射线结果并弄明白一系列非正常症状。
机器学习参与了你人生的每个阶段。如果你为了参加 SAT 大学入学考试(美国学术能力评估测试)而在网上学习,某学习算法会给你的练习短文打分。如果你申请商学院,且最近要参加 GMAT(经企管理研究生入学考试),其中的一个文章打分工具就是一个学习系统。可能当你求职时,某学习算法会从虚拟文件中挑选出你的简历,并告诉未来的雇主:这位是很不错的人选,看看吧。最近公司给你加薪可能还多亏另外的学习算法。如果想买套房子,Zillow.com 网站会估算你看中的每套房的价值,接着房子就有了着落。之后申请住房贷款,某学习算法会研究你的申请,并建议是否可以通过申请。最重要的是,如果你使用在线约会服务,机器学习甚至可能帮你找到人生挚爱。
社会在不断变化,学习算法也是如此。机器学习正在重塑科学、技术、商业、政治以及战争。卫星、DNA(脱氧核糖核酸)测序仪以及粒子加速器以前所未有的精细程度探索自然,同时,学习算法将庞大的数据转变成新的科学知识。企业从未像现在这样了解自己的用户。在美国大选中,拥有最佳选举模型的候选人奥巴马最终战胜了对手罗姆尼,获得了竞选胜利。无人驾驶汽车、轮船、飞机分别在陆地、海面、空中进行生产前测试。没有人把你的喜好编入亚马逊的推荐系统,学习算法通过汇总你过去的购买经历就能确定你的喜好。谷歌的无人驾驶汽车通过自学,懂得如何在公路上平稳行驶,没有哪个工程师会编写算法,一步一步指导它该怎么走、如何从 A 地到达 B 地——这也没必要,因为配有学习算法的汽车能通过观察司机的操作来掌握开车技能。
机器学习是“太阳底下的新鲜事”:一种能够构建自我的技术。从远古祖先学会打磨石头开始,人类就一直在设计工具,无论这些工具是手工完成的,还是大批量生产的。学习算法本身也属于工具,可以用它们来设计其他工具。“计算机毫无用处,”毕加索说,“它们只能给你提供答案。”计算机并没有创造性,它们只能做你让它们做的事。如果你告诉它们要做的事涉及创造力,那么就要用到机器学习。学习算法就像技艺精湛的工匠,它生产的每个产品都不一样,而且专门根据顾客的需要精细定制。但是不像把石头变成砖、把金子变成珠宝,学习算法是把数据变成算法。它们掌握的数据越多,算法也就越精准。
现代人希望让世界来适应自己,而不是改变自己来适应世界。机器学习是100万年传奇中最新的篇章:有了它,不费吹灰之力,世界就能感知你想要的东西,并依此做出改变。就像身处魔法林,在你通过时,周围的环境(今天虚拟,明天现实)会进行自我重组。你在树木和灌木中选出的路线会变成一条路,迷路的地方还会出现指路标志。
这些看似有魔力的技术十分有用,因为机器学习的核心就是预测:预测我们想要什么,预测我们行为的结果,预测如何能实现我们的目标,预测世界将如何改变。从前,我们依赖巫医和占卜师进行预测,但他们太不可靠;科学的预测就更值得信赖,但也仅限于我们能系统观察和易于模仿的事物,大数据和机器学习却大大超出这个范围。我们可通过独立的思维来预测一些常见的事情,包括接球和与人对话,但有些事情,即便我们很努力,也无法预测。可预测与难以预测之间的巨大鸿沟,可以交给机器学习来填补。