科学网

 找回密码
  注册
科学网 标签 深度学习 相关日志

tag 标签: 深度学习

相关日志

如何在 GPU 深度学习云服务里,使用自己的数据集?
wshuyi 2018-7-4 06:48
本文为你介绍,如何在 GPU 深度学习云服务里,上传和使用自己的数据集。 疑问 《 如何用云端 GPU 为你的 Python 深度学习加速? 》一文里,我为你介绍了深度学习环境服务 FloydHub 。 文章发布后,有读者在后台提出来两个问题: 我没有外币信用卡,免费时长用完后,无法续费。请问有没有类似的国内服务? 我想使用自己的数据集进行训练,该怎么做? 第一个问题,有读者替我解答了。 我看了一下,这里的 Russell Cloud ,确实是一款跟 FloydHub 类似的 GPU 深度学习云服务。 可是感谢之后,我才发现原来他是 Russell Cloud 的开发人员。 于是这几天,使用中一遇到问题,我就直接找他答疑了。 因为有这种绿色通道,响应一直非常迅速。用户体验很好。 这款国内服务的优势,有以下几点: 首先是可以支付宝与微信付款,无需 Visa 或者 Mastercard 信用卡,很方便; 其次是 Russell Cloud 基于阿里云,访问速度比较快,而且连接稳定。在上传下载较大规模数据的时候,优势比较明显。与之相比,FloydHub 上传500MB左右数据的时候,发生了两次中断。 第三是文档全部用中文撰写,答疑也用中文进行。对英语不好的同学,更友好。 第四是开发团队做了微创新。例如可以在微信小程序里面随时查看运行结果,以及查询剩余时长信息。 解决了第一个问题后,我用 Russell Cloud 为你演示,如何上传你自己的数据集,并且进行深度学习训练。 注册 使用之前,请你先到 Russell Cloud 上 注册 一个免费账号。 因为都是中文界面,具体步骤我就不赘述了。 注册成功后,你就拥有了1个小时的免费 GPU 使用时长。 如果你用我的邀请链接注册,可以多获得4个小时免费 GPU 使用时间。 我手里只有这5个可用的邀请链接。你如果需要,可以直接输入。 看谁手快吧。 注册之后,进入控制台,你可以看到自己的相关信息。 其中有个 Token 栏目,是你的登录信息。下面我给你讲讲怎么用。 你需要下载命令行工具,方法是进入终端,执行: pipinstall-Urussell-cli 然后你需要登录: russelllogin 这时候根据提示,把刚才的 Token 输入进去,登录就完成了。 与 FloydHub 不同,大多数情况下 Russell Cloud 的身份与项目验证,用的都是这种 Token 的方式。 如果你对终端命令行操作还不是很熟悉,欢迎参考我的《 如何安装Python运行环境Anaconda?(视频教程) 》,里面有终端基本功能详细执行步骤的视频讲解。 环境 下文用到的数据和执行脚本,我都已经放到了 这个 gitlab 链接 。 你可以直接点击 这里 下载压缩包,之后解压。 解压后的目录里,包含两个子文件夹。 cats_dogs_small_vgg16 包含我们的运行脚本。只有一个文件。 它的使用方法,我们后面会介绍。 先说说,你最关心的数据集上传问题。 数据 解压后目录中的另一个文件夹, cats_and_dogs_small ,就包含了我们要使用和上传的数据集。 如上图所示,图像数据被分成了3类。 这也是 Keras 默认使用的图像数据分类标准规范。 打开训练集合 train ,下面包含两个目录,分别是“猫”和“狗”。 当你使用 Keras 的图片处理工具时,拥有这样的目录结构,你就可以直接调用 ImageDataGenerator 下的 flow_from_directory 功能,把目录里的图片数据,直接转化成为模型可以利用的张量(tensor)。 打开 test 和 validation 目录,你会看到的目录结构和 train 相同。 请你先在 Russell Cloud 上建立自己的第一个数据集。 主页上,点击“控制台”按钮。 在“数据集”栏目中选择“创建数据集”。 如上图,填写数据集名称为“ cats_and_dogs_small ”。 这里会出现数据集的 ID ,我们需要用它,将云端的数据集,跟本地目录连接起来。 回到终端下面,利用 cd 命令进入到解压后文件夹的 cats_and_dogs_small 目录下,执行: russelldatainit--id你的数据集ID russelldataupload 请把上面“你的数据集ID”替换成你真正的数据集ID。 执行这两条命令,数据就被上传到了 Russell Cloud。 上传成功后,回到 Russell Cloud 的数据集页面,你可以看到“版本”标签页下面,出现了1个新生成的版本。 注意上图右侧,有一个“复制”按钮,点击它,复制数据集该版本的 Token 。 一定要注意,是从这里复制信息,而不是数据集首页的 ID 那里。 之前因为搞错了这个事儿,浪费了我很长时间。 运行 要执行你自己的深度学习代码,你需要在 Russell Cloud 上面,新建一个项目。 你得给项目起个名称。 可以直接叫做 cats_dog_small_vgg16 。 其他项保持默认即可,点击“创建项目”。 出现下面这个页面,就证明项目新建成功。 同样,你需要把本地的代码文件夹,和刚刚新建的项目连接起来。 方法是这样的: 复制上图页面的 ID 信息。 回到终端下,利用 cd 命令进入到解压后文件夹的 cats_dogs_small_vgg16 目录下,执行: russellinit--id你刚才复制的ID 这样,你在本地的修改,就可以被 Russell Cloud 记录,并且更新任务运行配置了。 执行下面这条命令,你就可以利用 Russell Cloud 远端的 GPU ,运行卷积神经网络训练脚本了。 russellrun pythoncats_dogs_small_vgg16_augmentation_freeze_russell.py --gpu--data 92e239 eca8e649928610d95d54bb3602:cats_and_dogs_small--envtensorflow -1.4 解释一下这条命令中的参数: run 后面的引号包括部分,是实际执行的命令; gpu 是告诉 Russell Cloud,你选择 GPU 运行环境,而不是 CPU; data 后面的数字串(冒号之前),是你刚刚生成的数据集版本的对应标识;冒号后面,是你给这个数据集挂载目录起的名字。假设这里挂载目录名字叫“potato”,那么在代码里面,你的数据集位置就是“/input/potato”; env 是集成深度学习库环境名称。我们这里指定的是 Tensorflow 1.4。更多选项,可以参考 文档说明 。 输入上述命令后, Russell Cloud 就会把你的项目代码同步到云端,然后根据你指定的参数执行代码。 你在本地,是看不到执行结果的。 你需要到网页上,查看“任务”下“运行日志”,在系统提供的模拟终端下,查看运行输出结果。 为了把好不容易深度学习获得的结果保存下来,你需要用如下语句保存模型: saved_model=output_dir/ 'cats_and_dogs_small_finetune.h5' model.save(saved_model) history.history 对象里,包含了训练过程中的一些评估数据,例如准确率(acc)和损失值(loss),也需要保存。 这里你可以采用 pickle 来完成: import pickle with open(Path(output_dir, 'data.pickle' ), 'wb' ) as f: pickle.dump(history.history,f) 细心的你,一定发现了上述代码中,出现了一个 output_dir , 它的真实路径是 output/ 。 它是 Russell Cloud 为我们提供的默认输出路径。存在这里面的数据,在运行结束后,也会在云端存储空间中保存下来。 你可以在“任务记录”的“输出”项目下看到保存的数据。它们已被保存成为一个压缩包。 下载下来并解压后,你就可以享受云端 GPU 的劳动果实了。 你可以用 history 保存的内容绘图,或者进一步载入训练好的模型,对新的数据做分类。 改进 在实际使用Russell Cloud中,你可能会遇到一些问题。 我这里把自己遇到的问题列出来,以免你踩进我踩过的坑。 首先,深度学习环境版本更新不够及时。 本文写作时 Tensorflow 稳定版本已经是 1.8 版,而 Russell Cloud 最高支持的版本依然只有 1.6。文档里面的最高版本,更是还停留在 1.4。默认的 Keras,居然用的还是 Python 3.5 + Tensorflow 1.1。 注意千万别直接用这个默认的 Keras ,否则 Python 3.6 后版本出现的一些优秀特性无法使用。例如你将 PosixPath 路径(而非字符串)作为文件地址参数,传入到一些函数中时,会报错。那不是你代码的错,是运行环境过于老旧。 其次,屏幕输出内容过多的时候(例如我跑了 100 个 epoch, 每个显示 100 条训练进度),“运行日志”网页上模拟终端往下拉,就容易出现不响应的情况。变通的方法,是直接下载 log 文件,阅读和分析。 第三,Keras 和 Tensorflow 的许多代码库(例如使用预训练模型),都会自动调用下载功能,从 github 下载数据。但是,因为国内的服务器到 github 之间连接不够稳定,因此不时会出现无法下载,导致程序超时,异常退出。 上述问题,我都已经反馈给开发者团队。对方已表示,会尽快加以解决。 如果你看到这篇文章时,上面这些坑都不存在了,那就再好不过了。 小结 本文为你推荐了一款国内 GPU 深度学习云服务 Russell Cloud 。如果你更喜欢读中文文档,没有外币信用卡,或是访问 FloydHub 和 Google Colab 不是很顺畅,都可以尝试一下。 通过一个实际的深度学习模型训练过程,我为你展示了如何把自己的数据集上传到云环境,并且在训练过程中挂载和调用它。 你可以利用平台赠送的 GPU 时间,跑一两个自己的深度学习任务,并对比一下与本地 CPU 运行的差别。 喜欢请点赞。还可以微信关注和置顶我的公众号 “玉树芝兰”(nkwangshuyi) 。 如果你对数据科学感兴趣,不妨阅读我的系列教程索引贴《 如何高效入门数据科学? 》,里面还有更多的有趣问题及解法。
10733 次阅读|0 个评论
科研四境界
热度 16 dwchen 2018-6-26 09:46
王国维在《人间词话》指出:“古今之成大事业、大学问者,必须经过三种境界:“昨夜西风凋碧树,独上高楼,望尽天涯路”此第一境界也;“衣带渐宽终不悔,为伊消得人憔悴”,此第二境也;“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”,此第三境也” 。王国维是国学大师,他提出的研究三境界主要指的是文科方面的研究,主要以查文献,阅读文献,然后提出新见解。 文科研究有时辅之以考据,这有点类似于今天的科研实验 ,胡适研究《红楼梦》就是一个很好的例子。在考证曹雪芹的生平之后,胡适得出结论:贾宝玉的原型就是曹雪芹,《红楼梦》就是曹雪芹家族生活的描述。当然,古代文科考据与今天科研实验还是有一些差距。在今天,科研活动日益复杂与分工精细,科研阶段历时不断增长。 在宋代,苏东坡 21 岁就中进士了,在文科研究方面已经历时多年,卓有建树。而今天约 22 岁读研究生才刚刚开始从事科学研究,要出一流的研究成果,还得需多年的磨练。 因此,王国维提出的做学问的三境界已经难以全面概括和反映今天的科研活动了。 结合我自身的科研经历和人工智能算法的发展,我认为科研活动可以分为四个境界,分别与人工智能的四大算法相对应。 首先,第一境界为监督科研,对应于人工智能的监督学习算法( Supervised Learning ) 。第一境界基本发生在我们的研究生阶段,以硕士生阶段为主,也经常发生在博士生的前半阶段。我们有导师指导,在导师的监督下开展科研。如何做由导师指导,做的效果好坏有导师评价。导师根据我们做的效果与他期望结果之间的偏差,进行指导,以尽可能减少误差,这与监督学习算法的工作模式类似。 第二境界为半监督科研,对应于人工智能的半监督学习算法 (Semi-Supervised Learning ) 。 该境界主要发生在博士后阶段,也有时发生在博士生阶段的后半段。随着我们研究问题的深入和研究能力的提高,导师不必要也没法给予太精细全面的指导,只能指导部分环节,这与半监督学习的工作方式比较类似。 前两个境界做科研是为了拿到学位,为了找到一份工作,也是满足人的基本需求。做科研的第三境界为强化科研,对应于人工智能的强化学习算法 (Reinforcement Learning ) 。 该境界主要发生在博士(博士后)毕业参加工作后较长的时间,一般从讲师到教授阶段,也包括为了获得各类学术帽子的科研阶段。在该阶段,科研主要为职称、帽子等奖励目标去搞项目,表现好业绩突出的会得到这些奖励。奖励刺激大家不断努力搞科研,最终达成一个又一个目标。这类 似强化学习的奖 励刺激原 理,算法的目标就是最大化奖励函数 。 第三境界主要是为名利而努力。其实,职称也是一种类型的帽子,对应一定的名利。 第四境界就是深度科研,对应人工智能的深度学习算法( Deep Learning )。 该境界主要发生在正教授职称拿到之后,或者是带上了各类学者、杰青的帽子之后,具体要看各人的设定的目标。一般来说, 该阶段在该实现的目标都实现之后,更难的目标(比如院士或诺贝尔奖等)已经不可能获得的情况下 。俗话说:“曲高和寡”、“高处不胜寒”,很多科研人员很难到达这个境界。 在该境界,科研已经不是获取名利的工具,而是一种爱好和生活。随着研究的不断深入,将获得更多的成就感,研究功力日益深厚,思考深度不断深入,能解决复杂的科研难题 。这类似与深度学习的网络层次不断加深,能更好地解决复杂的人工智能问题 。国外的终身教授大都处于深度科研这个境界,而国内的年度考核等制度使得深度科研较难实现,大家都忙于搞项目写论文应对年度考核, 出短平快的成果较多,科研的深度和有深度的科研则很少 。如今炙手可热的深度学习算法的发明人之一的 Hinton 教授执着于多层神经网络的深度研究 20 年,终于想出来了深度学习算法 。他于 2006 年在 Science 上发布有关深度学习的标志性论文,一文成名天下知,从而引发深度学习热潮。
个人分类: 科技创新|17317 次阅读|33 个评论
深度学习的一些思考
luchangli 2018-6-20 15:38
最近一年来,超分辨定位成像领域陆续有多篇结合深度学习的工作,做出了一些很吸引人结果。中间的一些也被Nature methods杂志 highlight。有一些感想如下: 这样一个长期依赖于严谨的数学物理模型的学科也被深度学习攻下,有喜有忧。一方面这个 未来的技术 势必无可阻挡的被应用在各行各业;但另一方面,如果牛顿会用,满足于用深度学习,他还能发现万有引力公式吗? 作为一个拿来即可用的工具,深度学习对于大多数数学物理非顶尖的研究者应该是件好事,但对本质规律长期深入的探索可能非常有害! 虽然大家有跟风,蹭热点之嫌,但不管怎么样,我觉得这个风还是很值得跟。毕竟它也是一个工具,少一个工具,就少一项解决问题的能力和看问题的角度。有一些问题,不用这个方法确实还不好做。前面也提到,我也相信它将会是一个未来普遍使用的技术。
2609 次阅读|0 个评论
人工智能与未来
热度 1 iggcas010 2018-6-18 23:50
今天我没有准备好相应的博文信息,在自己学习中总是遇到这样或那样的问题,不知道问谁,向谁请教。一直在寻找人工智能方向(包括机器学习、深度学习、数据挖掘、大数据等)的老师,然而在意料之中的是不顺利,因而自己建了个QQ群,欢迎对人工智能有极大兴趣的博士、专家、学者加入!希望能够在这个群里讨论热门问题,交流遇到的问题,共同进步,未来让我们一起AI ! QQ群号:156737288 名称:人工智能与未来 加群请填写实际信息,并修改群名片,方便交流!
2633 次阅读|2 个评论
“啤酒尿布”模型管用,说不清因果又怎样?
wshuyi 2018-6-15 16:42
好的模型,为什么非得是 人能够理解 的? 有的人,对深度学习(deep learning)模型,很不以为然。 说根本没有搞清楚因果关系,只是拿出相关性来说事儿。 尤其是模型无法清楚解释——即不能像牛顿力学一样,用简单优美的数学公式刻画。 奇怪,为什么模型一定要简单到清清楚楚? 复杂系统已经被研究了这么多年,却还有人恨不得回归前信息化时代。 总不能因为你只学过文科班高中物理,就得让全世界的科学研究退回到1800年之前吧? 人是通过大脑,对信息进行加工的。 连这个加工工具,至今都没有完全搞清楚,不是吗? 那为何要对机器们在大数据上,辛辛苦苦构造出的模型,如此苛刻? 一个模型,可以准确做分类预测。而且反复在新的、没有训练的数据上尝试过,好用,那不就好了? 虽然不能排除纯是因为运气,但是这种可能概率很小。 好的模型,为什么非得是 人能够理解 的? 人对于宏观世界,至今缺乏理解。大爆炸只是假说。 人对于微观世界,同样缺乏理解。什么叫“测不准”来着? 人对于暗物质,意见不一。找不到证据,成为了“最好的证据”。 人连时间是什么,还说不清楚。要不然哪儿来的这么多穿越剧? 那凭什么,一个好用的模型,只是因为层数多、结构复杂、无法用数学语言解释给听众,就被鄙视? 其实原因也不难理解。 都在于人类社会协作中的共识。 大家都认同的,很有价值。 例如美元、黄金和一线城市的房地产。 极少数人才认同的,价值没有这么高。 例如2012年的比特币。 大部分人都无法理解,自然难以达成共识。 这时候有人出来批评复杂模型,看不懂的人就觉得很爽。 看,我不理解的东西,就一定是不靠谱的,哈哈。 站队的结果,就是大部分连讨论对象是啥,都没有搞清楚的人,跟随主流意见,人云亦云而已。 然而…… 共识是会发生变化的,即所谓“范式转移”嘛。
7399 次阅读|0 个评论
分层集合与标志(特征/属性)集合均有深度学习的很好基础
geneculture 2018-6-4 18:09
分层集合与标志(特征/属性)集合均有深度学习的很好基础。-邹晓辉(中美塞尔研究中心主任研究员)
个人分类: 学术研究|2199 次阅读|3 个评论
卷积神经网络(CNN)引导:物理机制和算法结构
热度 4 zoumouyan 2018-6-4 16:33
卷积神经网络(CNN)引导:物理机制和算法结构 邹谋炎 中国科学院大学 “现代数字信号处理”课程讲座 2018年6月1日 在人工智能(AI)发展中,卷积神经网络(Convolutional Neural Networks)是实现深度学习的一种重要神经网络结构。人们通过互联网可以找到许多学习资料,介绍CNN的构造、算法和结果。CNN能够完成图像识别和理解,对初学者和研究者来说最基本的需要知道最底层的物理机制。了解物理机制才有把握知识的自由度,是透析各种结构不同CNN的关键,也是获得创造自由的起点。本讲座致力于对CNN的物理机制进行解说。同时介绍相关的背景知识,希望对有兴趣者起到入门引导的作用。 可以用图示方式解说有限离散卷积的计算方法,由“卷积”计算引出对应的“点积”计算;由“点积”定义两个数组的“相似度”。而一个局部图像和一个核(模板)的点积等价于以局部图像为输入的一个神经元,该神经元的各个权值正是核(模板)的各个值。局部图像与模板相似或匹配时,该神经元将产生出最大的输出。一幅输入图像的每个局部通过各自的神经元产生出输出图像,与输入图像和核进行卷积产生输出图像,其结果是等价的。这种情况下,输入图像中如果有与核的图样相匹配的局部图样,在输出图像中将被增强而凸显出来。这是隐藏在CNN中的底层机制。这个机制对一维或高维CNN都是基本的。在神经元的构造中除了点积部分外还引入了置偏和非线性激活函数,有助于加强因匹配得到增强的特征。 一幅输入图像的每个局部通过各自的神经元产生出输出图像,这和输入图像与核进行卷积产生输出图像,其结果等价,从神经网络的角度看,产生出一幅输出图像的各个神经元,其运算是并行的,其权值是共享的,这是CNN的一个特点。通过模板匹配方式能够增强图像中的一类特征,不需要事先进行图像分割,这是CNN的另一个特点。 使用许多个不同的卷积核和同一幅图像进行卷积,就可能凸现和增强该图像与不同模板匹配的特征,这些特征表现在不同卷积核对应的不同输出图像上,这些不同输出图像形成一个有“厚度”的图像组,一起作为CNN构造的一个层。 对有厚度的CNN层进行尺寸缩减是CNN构造的重要步骤。其目的不仅仅是为了减小最终判读的工作量,而更有意义的是为了便于获取图像中更“宏观”或更“综合”的结构特征。尺寸缩减的主要方法是下采样,称为“池化”(Pooling)。例如让图像每4个单元缩减成1个单元,整个图像尺寸就缩减成原来的1/4。有两种典型的下采样方法:在4个单元中取最大值为缩减后的单元值,称为Max-pooling;取4个单元的平均值为缩减后单元值,称为Mean-pooling。 可以想象,在一次Convolution-Pooling后再重复几次Convolution –Pooling 过程,被处理的图像分辨率越来越低,结构特征越来越“粗犷”或更具综合性。为了匹配越来越具综合性的特征,卷积核或模板的图样应该做适应性变化。这样,随着CNN层数增加,原图像中的结构特征,从初级的线条、棱边,到高级的外形和复杂图样,都有可能在CNN中形成一个匹配从初级到高级的图像特征链。如果CNN中原来没有这样一个表征(识别)某个图像的特征链,通过CNN的学习算法我们总是可能建立起这样一个特征链。 很明显,为了CNN能够识别大量不同的图像,在CNN各个层中就必须有若干权(卷积核)能够匹配从初级到综合的、不同的特征,并形成一个表征输入图像特征的一列图像特征链。因此,不同卷积核的数量和图样越丰富、CNN的层数越多,CNN的识别能力就越强。 讲座中包含了便于物理机制解说的若干示意图,包含了多层CNN的结构例子;Softmax分布和图像判读方法;卷积核的选取和生成;CNN学习算法等内容。 必须指出,本讲座以下内容具有 创新性 (未见文献报道):(1)引入 相似度、特征链的概念 ,据此对CNN物理机制进行清晰解说;(2) 卷积核的生成算法 。请引用者注明出处。 本讲座适合于初入者和研究者。 CNN引导:物理机制和算法结构2018.pdf
8008 次阅读|5 个评论
双语平行语料与深度神经网络及其匹配算法之间的相互关系
geneculture 2018-4-29 12:49
4月27号(前天)冯志伟教授应邀在北大理科一号楼1303学术交流大讨论班上的报告系统回顾了机器翻译的历程,其中以上三幅ppt截图(最后一幅是邹晓辉昨天与林建祥教授林老远程回顾的时候用彩色线条和三个红苹果🍎做了标注说明的,由此不仅可见双语平行语料与深度神经网络及其匹配算法之间的相互关系,而且还可以知道我们正在做的国家自然科学基金项目与它们之间的相互关系) 2018-4-27上午的报告(冯志伟与邹晓辉) www.webmeeting.com.cn:8800/pub_recording_view_ecard.php?id=76 下午的报告(马蔼乃与邹晓辉) www.webmeeting.com.cn:8800/pub_recording_view_ecard.php?id=77 第二天即28号林建祥与邹晓辉的对话 www.webmeeting.com.cn:8800/pub_recording_view_ecard.php?id=78
个人分类: 学术研究|2077 次阅读|0 个评论
专题讨论班:深度学习(三)(周池春)
GrandFT 2018-4-19 20:55
题目:深度学习简介(三) 主讲:周池春 时间:2018年4月20日(星期五)上午10:15 地点:天津大学新校区32教学楼302室 提纲: 1 深度学习中的正则化。关键词: 参数范数惩罚、数据集增强、噪声鲁棒性、提前终止、稀疏表示、对抗训练等。 2 深度模型中的优化。关键词:批量算法、梯度爆炸、Nesterov动量、AdaGrad、RMSProp、Adam、监督预训练等。 3 Linux系统下tenserflow 环境搭建。 参考书:Ian Goodfellow, Yoshua Bengio, Aaron Courville《DEEP LEARNING》
个人分类: 专题讨论班|2215 次阅读|0 个评论
专题讨论班:深度学习(二)(周池春)
GrandFT 2018-4-18 21:13
题目:深度学习(二) 主讲:周池春 时间:2018年4月19日(星期四)上午10:15 地点:天津大学新校区32教学楼302室 提纲: 1 BP算法的python编程实现例子。 2 信息论。 3 RNN 模型以及其变形模型。 参考书: Ian Goodfellow, Yoshua Bengio, Aaron Courville《DEEP LEARNING》; 周志华《机器学习》; 吴军 《数学之美》。
个人分类: 专题讨论班|1848 次阅读|0 个评论
专题讨论班:深度学习(一)(周池春)
GrandFT 2018-4-17 16:50
题目:深度学习 主讲:周池春 时间:2018年4月18日(星期三)上午8:00 地点:天津大学新校区32教学楼302室 提纲: 1. 应用数学与深度学习基础。关键词:主成分分析、信息论、概率论的频率学派与贝叶斯学派。 2. 数值计算。关键词:梯度下降法。 3. 机器学习基础。关键词:容量、超参数、交叉验证、最大似然估计、最大后验估计、监督学习、无监督学习等。 4. 深度前馈网络。关键词:激活函数、反向传播算法。 参考书:Ian Goodfellow, Yoshua Bengio, Aaron Courville《DEEP LEARNING》
个人分类: 专题讨论班|2329 次阅读|0 个评论
[转载]DeepMind黄士杰:深度学习有创造性,正参与星际2项目
Kara0807 2018-3-30 23:08
本文转载自公众号“量子位” 最近,AlphaGo“人肉臂”黄士杰回到台北参加了Google举办的一次人工智能论坛。并且发表了《AlphaGo与AI的黄金时代》演讲。 从小就喜欢围棋的黄士杰,求学期间就一直对围棋软件感兴趣。他在博士班期间开发了Erica,这个单机版本的围棋软件,当时打败了围棋领域最强的AI、使用了六台机器的Zen。 也正是如此,DeepMind的核心人物David Silver力邀黄士杰加盟,而后者也成为DeepMind第40号员工。 不过,他第一次踏进DeepMind那天,这家公司的创始人就跟他说,DeepMind并不打算朝围棋方向发展,因为他们的目标不是在特定领域成为最佳,而是希望搞出通用人工智能,让AI解决人类无法解决的问题。 但是,随着深度学习等技术的不断进步,DeepMind最后还是决定启动围棋项目。 为了研发出AlphaGo,DeepMind团队尝试过上百个想法,发展过程就是不停的实验、实验、实验,不停学习新理论。 实际上,在击败李世乭之后,DeepMind就曾打算终止AlphaGo项目,但是考虑到第四局犯下的错误,他们还是决定仍然使用神经网络把这个问题修正掉,毕竟有缺陷的AI会失去他人的信任。 这就有了后续AlphaGo的继续进步。 黄士杰表示,AlphaGo在围棋领域做出了很多令人震撼的下法,在国际象棋领域也是如此。黄士杰认为,这些都是深度学习具有“创造性”的表现。 目前AlphaGo项目已经正式终结,黄士杰透露DeepMind正在研发能打《星际争霸2》的AI,而他本人也参与了这个项目。 很多人认为在即时战略游戏中,AI的反应速度会成为极大的优势,但事实并非如此。 黄士杰解释称,围棋只有361个落子点,对AI来说全部游戏内容都是可见的。但《星际争霸2》游戏有大量全黑的地图,玩家需要探索地图以及侦查对手动向,才能制定相应的策略。 几乎每次鼠标移动,都能视为一次落子。这种不确定性让《星际争霸2》对AI来说,难度比围棋要高很多。 长期研究人工智能的黄士杰认为,人类还是最聪明,AI会成为一种协助工具,帮助人类解决一些实际问题,例如早期癌症的诊断。 📚 往期文章推荐 AI+区块链丨区块链如何解锁人工智能新领域 🔗 北大黄铁军专访:“新一代人工智能产业技术创新战略联盟”成立8个月做了哪些事? 🔗 人工智能荣登《自然》杂志:超级AI系统可用于诊断近100种脑癌 🔗 这里有一个免费查看学术期刊的小程序,了解一下? 🔗 【NSR特别专题】香港科技大学杨强:多任务学习概述 🔗 【NSR特别专题】清华大学朱军:关于图的表达学习 🔗 【NSR特别专题】CMU张坤:学习因果关系和基于因果关系的学习 🔗 中科院王飞跃:第三轴心时代的智能产业,创立发展智能科技的新“直道” 🔗 【大国重器】2018国家机器人发展论坛为何花落柯桥? 🔗 中国工程院院士何友:工业大数据及其应用 🔗 2018年度国家科技奖提名公示,信息科学组获47项提名(附提名项目)
个人分类: 德先生|1223 次阅读|0 个评论
【尼沙龙笔记:从AI那点事儿聊到知识图谱】
liwei999 2017-12-24 04:11
洪: 老尼八卦真是勤快: 红利扑克:王劲其人-好色、背信、拍马屁 陈: 到了百度,他带去了得意手下Alex(新加坡人),某丽(美籍华人),还有旧部某栋,还接管了金牌得主大牛戴某渊。他咋啥都知道。还好没说洪爷。 洪: 的确道听途说,许多因果都颠倒了。某栋是我拉进去做凤巢,老王来了就跑路了 陈: 你也是坏淫啊 洪: 老尼八卦忒勤奋, 道听途说扒某劲。 天地或真显冥冥, 有绳有网施报应。 行: 老尼看来就主要对x劲来劲 李: 老尼不是尼克吗? AI那点事儿,非尼老莫属,有道是: 尼老老尼拧不清, AI 八卦两争雄。 一神一鬼一冰冰, 老道洪爷说分明。 洪: 我以前跟人总结说,某栋来助一臂之力做凤巢(其实他原来是edward chang下面做social network机器学习推荐算法的,也不是做广告的),某度尝到了招谷里人的技术甜头。过了一年凤巢都上线了。隔壁老王带俩管理的人他们才来,本来老王允诺要来的技术专家某Paul被腾讯截胡抢走了。就这样,技术甜头成了管理毒药。 “尼”真是好字,谁粘谁 李: 洪爷不出山写本英雄传,正本清源,可惜了。看尼克形单影只孤身奋战,谣言比八卦远行 ---- 唯冰冰永存。 洪: 都是江湖破事,不值得写书。悠悠万事,唯此为大,还是AI为重。 李: 认真说,我对历史八卦兴趣不大,倒是非常好奇这一波AI热如何收场,我们都是不同程度的吹鼓手。泼冷水偶尔为之,但总体大多推波助澜,可三年、五年、八年之后究竟如何呢?有点害怕。“谨慎乐观”感觉上甚至都太乐观了一点。万一历史循环,AI 打入冷宫,不受人待见,我们这拨人要想等下一波的AI热,是没戏了。到时候,我们人人都可以学个星座,做八卦家,把酒话桑麻,对着资深女神冰老太,哼着AI小曲儿:商女不知亡国恨,隔江犹唱后庭花. ..... 唐: 以中国干大跃进的精神,这次AI肯定吹过了。 李: 问题是:这次大跃进可以不可以软着陆?省得鸡飞蛋打,大家伙儿都成了殉葬品。 张: 现在政府把AI作为政绩,如果谁谁引进国际知名专家(比如太湖洗澡蟹从阳澄湖捞出来)然后成立一个联合研究中心,各大园区可以给几千万到一个亿。各位大咖赶脚的,过这村没这店了。 洪: AI落到实处就跟数据库似的,休要担惊少要害怕@wei 唐: AI都经历过两次寒冬了,第三次来了也不怕。尤其是打算做AI芯片的,寒冬时做才能踏在前人的血迹上前进。 洪: 年轻人挣房钱奶粉钱,院士们挣名利,政客挣中国梦,……,各得其所 尼: @唐 寒冬时也没见你做啊。 唐: 我上次做的也是NPU。 洪: NP了您啊。 李: @洪 AI落到实处就是知识图谱,可不就跟数据库似的。我心戚戚呀。洪爷火眼。 董: @洪 真正的明白人,深刻、看得透。 唐: 知识图谱不是很难表达有条件的知识吗?要想快速落地,我觉得还是规则库靠谱。 李: 那就结合呗,横竖都是库。 库啊、谱啊就是个筐,啥 AI 都可以往里装。 唐: 关键还是几个数据库之间的join比较难做?在工程实践当中还是有点难度处理的。 李: 现如今图谱好听,就叫图谱,里面可以有 unigram 知识,bigram 的关系,if then productions (所谓产生式),甚至 prolog backtracking,...... 董: 如今流行的“知识图谱”是怎么告诉计算机:“什么是‘有/‘have’’? 唐: Prolog缺的是现在大数据最擅长的统计学知识。很多知识是动态的。例如:过去五天工作日的平均值,这个知识图谱无法表示,需要动态地计算。 李: 唐老师的视角还是太技术细节,太工程,技术上的实现与打通终归是可行的,只要哲学不错,实现上有的是能人。认真说,从万米高空俯瞰知识表达,没结构的知识就是传统词典,里面除了入口词,output就是各种features,那是通向ontology的门票。有结构的知识统统可以叫图谱(graph,广义),包括 svo(open domain 的碎片事件),包括 ontology,里面分常识 (HowNet,cyc)与领域知识(譬如“产品目录手册”),再里面可以区分简单知识,与经验型推理知识,后者也可以涵盖从大数据挖掘出来的 if then scenario,以及 hidden links,它们不再是碎片化情报,也不是大数据显性表达的事实(已知信息),而是蕴含在千千万万事实里面的 correlations,是 derived 出来的新知识,积淀为领域场景经验的形式化,这是对领域本体知识的一个动态补充,可算是图谱事业最前沿的研究了。大数据挖掘出来的过往trends,可以是对未来预测的很好的输入。 最后,也是最核心最基础的,就是情报类知识(知识图谱的本义,或窄义),也是静态语汇为基础,不过入口词大多为实体名(named entities),里面就是实体间关系(relationships),然后就是事件(events),事件串起来就成了story ...... 唐: 大体上就是这些知识。 综合起来是一项复杂的工程实践。 李: 有了story 就好说事儿了。有句名言(到处都是这大标语),云:抬头讲故事,低头思故乡 ...... oops 低头干实事儿。 唐: 我们现在就在做。领域知识+安全情报的结合。 发现这主要是数据清理的活。 李: 清理极端重要。不过听上去不够高大上,给人感觉就是个扫大街的。唐老师是实干家。 唐: 被逼无奈,以解决问题为主。 李: 知识(图谱)的事儿 的确是一个巨大的系统工程。这方面 还真应该赞佩一下 IBM,他们懂得怎么把混杂的知识捏在一起,成就一个计算机博物馆里的里程碑事件(博物馆有几个AI里程碑展厅,其中一个就是IBM花生系统在知识问答TV竞赛中击败人类)。当然 人家也有那个财力和底气。 洪: @wei 这两天我献给你一个打油偈子。 李: 打油在哪儿?我不怕打油 ..... or 被打油。 洪: @wei 我还在酝酿啊,从你翻译的ken church的钟摆开始说起。 李: 从来没有耐性做翻译,但那篇太经典,是@董振东老师给我特别推荐的,最后下定决心翻译出来。以对经典的虔敬心理,字斟句酌,旬月踯躅,有些细节反复与 Church 电邮请教商榷。董老师也做了审阅 ,终于成篇。【计算机通讯】发了后,貌似没有动静,毕竟与主流的调子不合拍。后来被一个叫《机器之心》的转载,才似乎传播开一点。人智八卦大师尼克也点了赞,NLP 的钟摆,就是 AI 起落的实例。 NLP主流反思的扛鼎之作: 立委译《Church:钟摆摆得太远》(全) 郭: @wei 这篇现在看,写的早了些,缺乏对深度神经的洞察,因而现如今不容易触动人心,还不如一句“炼丹术”激起千层浪。 李: 天不变道不变,天变了道亦不变,是为经典。 其实 Church 写完后颇落寞,根本没啥动静呀。新锐不理他(机器学习老一辈不吃香了,新一代深度学习小牛成长起来,此一时彼一时,长江后浪推前浪啊)。他是统计派老革命家,我写信问他深度神经与AI钟摆的关系,他回说:看样子钟摆的理性主义回摆还要延宕10年,这波深度神经热潮够他们忙一阵子了。 是啊,人类本性,不触礁,不回船。现在呼吁两派革命大团结的,大多是老司机了。他们辉煌过,也触过礁,知道AI和NLP的深浅,而且忧国忧民,不像初生牛犊那样高歌猛进无暇他看。 写这句结语的时候,在我心中,老司机就是李航这样的,而初生牛犊 我也见过几个 那真是满满正能量,AI 乐观主义,很感染人:新锐AI技术领军,单气势就招人喜爱。在他们面前,老朽不知道说啥好了,先道天凉好个冬,再道冬至饺子香(南湾有个同同手工水饺,昨晚去那叫一个门庭若市)。 在最近的中文信息学会年会上,李航和我都被特邀做了报告,我谈中文NLP的迷思及其化解之道,顺带批判乔姆斯基搞砸了符号逻辑和规则系统,李航强调的是知识记忆,觉得这是AI的未来,因为目前AI主流大多是端到端,老熊掰棒子,没有知识积累,知识都是从带标大数据现学的,换一个项目,一切重来。李航 argue 说,这不是人类的知识学习方式。我问他,难道知识图谱不是知识积累和记忆吗?他说,也许我说没有记忆和积累是 overstatement,知识图谱的确是积累并且可以跨项目重复使用的。但他又 added 说,但大多数系统是不用知识图谱的。他说得对,知识图谱作为话题虽然很热,但真正用知识图谱做系统应用的人目前很少。但我个人认为,未来应该是个大方向。 【相关】 【语义计算:李白对话录系列】 【置顶:立委NLP博文一览】 《朝华午拾》总目录
个人分类: 立委科普|3064 次阅读|0 个评论
[转载]NIPS 2017经典论文奖获得者机器学习「炼金术」说引热议。。。
fanlixin 2017-12-11 10:17
转评:Ali Rahimi 的炼金术 (或者按中国传统,炼丹术)评论并不是无的放矢, 特别地, 他举了 batch-normalization 的例子来说明,没有理论支持的各种tricks很可能会误导研究的方向。无独有偶,我的NIPS文章 也说明了batch-normalization并不是本质性的和必不可少的。 但是,学界必须鼓励以实验为导向的研究。 类似于地理大发现,早期的探索者们并不会有完整的理论 ( 地图 ) ,但他们的发现极大地延伸了我们的视野,将为理论的建立奠定基础。 Revisit Fuzzy Neural Network: Demystifying Batch Normalization and ReLU with Generalized Hamming Network http://papers.nips.cc/paper/6788-revisit-fuzzy-neural-network-demystifying-batch-normalization-and-relu-with-generalized-hamming-network ========== 观点 | NIPS 2017经典论文奖获得者机器学习「炼金术」说引热议,LeCun发起反驳 2017-12-08 机器之心 机器之心报道 参与: 路雪、刘晓坤、李泽南 去年的 NIPS 曾因 GAN 引发了一场风波 ,而今年的 NIPS 同样有着不同思想的碰撞,而这场机器学习「炼金术」讨论竟是从大会颁奖典礼上开始的。 谷歌研究员,MIT 博士 Ali Rahimi 获得了今年 NIPS Test of Time 大奖,他在颁奖时上做了一番演讲,主要介绍之前的研究成果,他在演讲中还打了个比方「机器学习是炼金术」,但这一言论遭到了 Yann LeCun 的反驳。在这篇文章中我们将看到不同思想的碰撞。 Ali Rahimi 的完整演讲视频 Ali Rahimi 在演讲中说道: 「吴恩达曾说过, 机器学习就像是新时代的电力 。我却认为,机器学习正在变成新时代的炼金术。炼金术本身并不坏,它引出了冶金、纺织、玻璃制造,也推动了人类医疗科技的发展;但与此同时,炼金术师还用水蛭来给人治病,希望让其他金属变成金子。」 「对于 18 世纪的物理学和化学而言,想要理解宇宙的法则,科学家们需要努力抵抗有两千年历史的炼金术的不利影响。」 「现在,如果我们想要做一个图片分享系统,『炼金术』是可以奏效的。但我们的需求早已不止这些了。我们正在试图构建基于人工智能的医疗服务系统、对话系统,我们的机器学习系统甚至影响了大选结果。我希望我所生活的世界是基于非常稳固、有规律的、理论性的知识之上的——而不是炼金术之上。」 「过去 NIPS 大会上经常出现的『学术警察』在哪里?我非常怀念他们。」 …… 「我们现在是这样构建新知识的:我们应用最好的工具,简单地分析自己做的设置,我们学习现象,然后在自己不理解背后原理的情况下完成了研究。就这么完成了。」 Yann LeCun 对此番言论表示道: Ali Rahimi 在 NIPS 上的演讲很好,很有意思,但是我不同意他的观点。他的主要观点是机器学习的当前实践就像「炼金术」(alchemy)。 这种观点具有侮辱性,而且也是错误的! Ali 抱怨当前机器学习尤其是深度学习使用的很多方法缺少(理论)理解。(理论或其他方面的)理解当然重要。这正是我们很多人参加 NIPS 大会的目的。但另一个重要目标是发明新方法、新技术和新技巧。 在科技发展史上,工程的发展几乎总是先于理论理解:镜头和望远镜的发展早于光学理论、蒸汽机的发展超越热动力学、飞机的发展快于空气力学、无线电和数据通信的发展快于信息理论、计算机的发展早于计算机科学。 原因何在?因为理论家本能地研究「简单的」现象,不主动研究复杂现象,除非它具备很重要的实践意义。 仅仅因为理论没有追赶上实践的水平,就批评整个机器学习社区使用「炼金术」,这种言论是危险的。 为什么危险?正是这种态度使机器学习社区放弃神经网络 10 年有余,尽管大量实证研究证明神经网络在很多情况下非常有效。 之前,神经网络和非凸损失函数不确保一定会收敛,不过它们在实践中是奏效的(和现在一样)。但是人们就这样不分良莠地将它舍弃,转而专注于「可证明」的凸方法或「被夸大的」模板匹配方法(甚至 1957 年的随机特征方法)。 坚持一套方法仅仅因为它的理论比较充分,并因此忽视另一套实践效果更好的方法,仅仅因为缺乏理论理解,这种做法何异于缘木求鱼(原文:就像你在街灯下找丢失的车钥匙,虽然心里明明知道丢钥匙的地方并不在这)。 是的,我们需要更好地理解方法。但是正确的态度是尝试改变现状,而不是因为现状没有得到改变而去侮辱整个社区。 我组织和参加过很多深度学习研究者和理论家参与的 workshop,有些 workshop 由 IPAM 举办。作为 IPAM 科学顾问委员会的一员,我的使命就是使深度学习获得数学社区的注意。事实上,我作为联合组织者组织了一场将于 2018 年 2 月举办的 workshop(http://www.ipam.ucla.edu/…/wo…/new-deep-learning-techniques/)。 如果你不满意我们对你们日常使用方法的理解,那么就去改变它:研究深度学习理论,而不是抱怨别人不去做这件事,也不是认为如果仅使用「理论正确」的方法,NIPS 会变得更好。并不是这样。 Ali Rahimi 的回复: Yann,感谢你的理智回应。「If you don't like what's happening, fix it」正是 Moritz Hardt 一年前告诉我的话。仅靠一个小群体是很难做出重大成果的,说实话,我已经被这个任务的巨大规模所淹没而不知所措。我这次演讲的目的就是请求他人的帮助。 我认为问题并不在于理论,而在于教育。我呼吁的是简单的定理和简单的实验,从而让所有人能无障碍地交流各自的见解。你很擅长构建深度学习模型,是因为你运行实验的经验比多数人都丰富。想象一下新手的困惑处境吧。我们做的事情的确看起来像魔法,因为我们并不讨论技术细节,而是模型整体。入门的过程太神秘了。 我同意炼金术式的方法很重要,正是它们使我们加快速度。这些方法解决了很多紧迫的问题。 我很尊重那些能快速在大脑中构建直觉和可行系统的人。你和我在谷歌的大多数同事都具备这种能力,但你们只是少数。 我希望你们传授一些技术细节,帮助我们也能达到你们级别的生产能力。而这就需要:简单的实验,简单的理论。 Yan LeCun 的回复: 简单而通用的理论当然很好。 热力学理论告诉我们不要浪费时间寻找拥有 100% 效率的热机或者永动机。 机器学习中也已经有这样适用于所有学习机器包括神经网络的理论(例如,VC theory consistency/capacity、没有免费午餐定理等)。 但我们很可能不会有具体到神经网络的「简单」理论,就像纳维-斯托克斯方程和三体问题也没有解析解。 虽然目前机器学习的部分工具还存在「黑箱」区域,但这项技术毫无疑问正处在越来越快的发展过程中,正如 Ali Rahimi 在演讲中所说的,希望随着人们的努力,我们能够最终将「炼金术」转化为真正的「电力」。 本文为机器之心报道, 转载请联系本公众号获得授权 。 ✄------------------------------------------------
1960 次阅读|1 个评论
如何用Python和深度神经网络发现即将流失的客户?
热度 1 wshuyi 2017-11-19 19:08
想不想了解如何用Python快速搭建深度神经网络,完成数据分类任务?本文一步步为你展示这一过程,让你初步领略深度学习模型的强大和易用。 烦恼 作为一名数据分析师,你来到这家跨国银行工作已经半年了。 今天上午,老板把你叫到办公室,面色凝重。 你心里直打鼓,以为自己捅了什么篓子。幸好老板的话让你很快打消了顾虑。 他发愁,是因为最近欧洲区的客户流失严重,许多客户都跑到了竞争对手那里接受服务了。老板问你该怎么办? 你脱口而出“做好客户关系管理啊!” 老板看了你一眼,缓慢地说“我们想知道哪些客户最可能在近期流失”。 没错,在有鱼的地方钓鱼,才是上策。 你明白了自己的任务——通过数据锁定即将流失的客户。这个工作,确实是你这个数据分析师分内的事儿。 你很庆幸,这半年做了很多的数据动态采集和整理工作,使得你手头就有一个比较完备的客户数据集。 下面你需要做的,就是如何从数据中“沙里淘金”,找到那些最可能流失的客户。 可是,该怎么做呢? 你拿出欧洲区客户的数据,端详起来。 客户主要分布在法国、德国和西班牙。 你手里掌握的信息,包括他们的年龄、性别、信用、办卡信息等。客户是否已流失的信息在最后一列(Exited)。 怎么用这些数据来判断顾客是否会流失呢? 以你的专业素养,很容易就判断出这是一个分类问题,属于机器学习中的监督式学习。但是,你之前并没有做过实际项目,该如何着手呢? 别发愁,我一步步给你演示如何用Python和深度神经网络(或者叫“深度学习”)来完成这个分类任务,帮你锁定那些即将流失的客户。 环境 工欲善其事,必先利其器。我们先来安装和搭建环境。 首先是安装Python。 请到 这个网址 下载Anaconda的最新版本。 请选择左侧的Python 3.6版本下载安装。 其次是新建文件夹,起名为demo-customer-churn-ann,并且从 这个链接 下载数据,放到该文件夹下。 (注:样例数据来自于匿名化处理后的真实数据集,下载自 superdatascience官网 。) 打开终端(或者命令行工具),进入demo-customer-churn-ann目录,执行以下命令: jupyter notebook 浏览器中会显示如下界面: 点击界面右上方的New按钮,新建一个Python 3 Notebook,起名为customer-churn-ann。 准备工作结束,下面我们开始清理数据。 清理 首先,读入数据清理最常用的pandas和numpy包。 import numpy as np import pandas as pd 从 customer_churn.csv 里读入数据: df = pd.read_csv( 'customer_churn.csv' ) 看看读入效果如何: df.head() 这里我们使用了 head() 函数,只显示前5行。 可以看到,数据完整无误读入。但是并非所有的列都对我们预测用户流失有作用。我们一一甄别一下: RowNumber:行号,这个肯定没用,删除 CustomerID:用户编号,这个是顺序发放的,删除 Surname:用户姓名,对流失没有影响,删除 CreditScore:信用分数,这个很重要,保留 Geography:用户所在国家/地区,这个有影响,保留 Gender:用户性别,可能有影响,保留 Age:年龄,影响很大,年轻人更容易切换银行,保留 Tenure:当了本银行多少年用户,很重要,保留 Balance:存贷款情况,很重要,保留 NumOfProducts:使用产品数量,很重要,保留 HasCrCard:是否有本行信用卡,很重要,保留 IsActiveMember:是否活跃用户,很重要,保留 EstimatedSalary:估计收入,很重要,保留 Exited:是否已流失,这将作为我们的标签数据 上述数据列甄别过程,就叫做“特征工程”(Feature Engineering),这是机器学习里面最常用的数据预处理方法。如果我们的数据量足够大,机器学习模型足够复杂,是可以跳过这一步的。但是由于我们的数据只有10000条,还需要手动筛选特征。 选定了特征之后,我们来生成特征矩阵X,把刚才我们决定保留的特征都写进来。 X = df.loc ] 看看特征矩阵的前几行: X.head() 显示结果如下: 特征矩阵构建准确无误,下面我们构建目标数据y,也就是用户是否流失。 y = df.Exited! (http://upload-images.jianshu.io/upload_images/ 64542 -a15e6d0d91c8b28e.jpg?imageMogr2/auto-orient/strip% 7 CimageView2/ 2 /w/ 1240 ) y.head() 0 1 1 0 2 1 3 0 4 0 Name: Exited, dtype: int64 此时我们需要的数据基本上齐全了。但是我们发现其中有几列数据还不符合我们的要求。 要做机器学习,只能给机器提供数值,而不能是字符串。可是看看我们的特征矩阵: X.head() 显然其中的Geography和Gender两项数据都不符合要求。它们都是分类数据。我们需要做转换,把它们变成数值。 在Scikit-learn工具包里面,专门提供了方便的工具 LabelEncoder ,让我们可以方便地将类别信息变成数值。 from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder1 = LabelEncoder() X.Geography= labelencoder1.fit_transform(X.Geography) labelencoder2 = LabelEncoder() X.Gender = labelencoder2.fit_transform(X.Gender) 我们需要转换两列,所以建立了两个不同的labelencoder。转换的函数叫做 fit_transform 。 经过转换,此时我们再来看看特征矩阵的样子: X.head() 显然,Geography和Gender这两列都从原先描述类别的字符串,变成了数字。 这样是不是就完事大吉了呢? 不对,Gender还好说,只有两种取值方式,要么是男,要么是女。我们可以把“是男性”定义为1,那么女性就取值为0。两种取值只是描述类别不同,没有歧义。 而Geography就不同了。因为数据集里面可能的国家地区取值有3种,所以就转换成了0(法国)、1(德国)、2(西班牙)。问题是,这三者之间真的有序列(大小)关系吗? 答案自然是否定的。我们其实还是打算用数值描述分类而已。但是取值有数量的序列差异,就会给机器带来歧义。它并不清楚不同的取值只是某个国家的代码,可能会把这种大小关系带入模型计算,从而产生错误的结果。 解决这个问题,我们就需要引入 OneHotEncoder 。它也是Scikit-learn提供的一个类,可以帮助我们把类别的取值转变为多个变量组合表示。 咱们这个数据集里,可以把3个国家分别用3个数字组合来表示。例如法国从原先的0,变成 (1, 0, 0) ,德国从1变成 (0, 1, 0) ,而西班牙从2变成 (0, 0, 1) 。 这样,再也不会出现0和1之外的数字来描述类别,从而避免机器产生误会,错把类别数字当成大小来计算了。 特征矩阵里面,我们只需要转换国别这一列。因为它在第1列的位置(从0开始计数),因而 categorical_features 只填写它的位置信息。 onehotencoder = OneHotEncoder(categorical_features = ) X = onehotencoder.fit_transform(X).toarray() 这时候,我们的特征矩阵数据框就被转换成了一个数组。注意所有被OneHotEncoder转换的列会排在最前面,然后才是那些保持原样的数据列。 我们只看转换后的第一行: X array ( ) 这样,总算转换完毕了吧? 没有。 因为本例中,OneHotEncoder转换出来的3列数字,实际上是不独立的。给定其中两列的信息,你自己都可以计算出其中的第3列取值。 好比说,某一行的前两列数字是 (0, 0) ,那么第三列肯定是1。因为这是转换规则决定的。3列里只能有1个是1,其余都是0。 如果你做过多元线性回归,应该知道这种情况下,我们是需要去掉其中一列,才能继续分析的。不然会落入 “虚拟变量陷阱” (dummy variable trap)。 我们删掉第0列,避免掉进坑里。 X = np.delete(X, , 1 ) 再次打印第一行: X array ( ) 检查完毕,现在咱们的特征矩阵处理基本完成。 但是监督式学习,最重要的是有标签(label)数据。本例中的标签就是用户是否流失。我们目前的标签数据框,是这个样子的。 y.head() 0 1 1 0 2 1 3 0 4 0 Name: Exited, dtype: int64 它是一个行向量,我们需要把它先转换成为列向量。你可以想象成把它“竖过来”。 y = y y array ( , , , ..., , , ]) 这样在后面训练的时候,他就可以和前面的特征矩阵一一对应来操作计算了。 既然标签代表了类别,我们也把它用OneHotEncoder转换,这样方便我们后面做分类学习。 onehotencoder = OneHotEncoder() y = onehotencoder.fit_transform(y).toarray() 此时的标签变成两列数据,一列代表顾客存留,一列代表顾客流失。 y array ( , , , ..., , , ]) 总体的数据已经齐全了。但是我们 不能 把它们 都用来 训练。 这就好像老师不应该把考试题目拿来给学生做作业和练习一样。只有考学生没见过的题,才能区分学生是掌握了正确的解题方法,还是死记硬背了作业答案。 我们拿出20%的数据,放在一边,等着用来做测试。其余8000条数据用来训练机器学习模型。 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2 , random_state = 0 ) 我们看看训练集的长度: len(X_train) 8000 再看看测试集的长度: len(X_test) 2000 确认无误。 是不是可以开始机器学习了? 可以,但是下面这一步也很关键。我们需要把数据进行标准化处理。因为原先每一列数字的取值范围都各不相同,因此有的列方差要远远大于其他列。这样对机器来说,也是很困扰的。数据的标准化处理,可以在保持列内数据多样性的同时,尽量减少不同类别之间差异的影响,可以让机器公平对待全部特征。 我们调用Scikit-learn的 StandardScaler 类来完成这一过程。 from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test) 注意,我们只对特征矩阵做标准化,标签是不能动的。另外训练集和测试集需要按照 统一的标准 变化。所以你看,训练集上,我们用了 fit_transform 函数,先拟合后转换;而在测试集上,我们直接用训练集拟合的结果,只做转换。 X_train array ( , , , ..., , , ]) 你会发现,许多列的方差比原先小得多。机器学习起来,会更加方便。 数据清理和转换工作至此完成。 决策树 如果读过我的《 贷还是不贷:如何用Python和机器学习帮你决策? 》一文,你应该有一种感觉——这个问题和贷款审批决策很像啊!既然在该文中,决策树很好使,我们继续用决策树不就好了? 好的,我们先测试一下经典机器学习算法表现如何。 从Scikit-learn中,读入决策树工具。然后拟合训练集数据。 from sklearn import tree clf = tree.DecisionTreeClassifier() clf = clf.fit(X_train, y_train) 然后,利用我们建立的决策树模型做出预测。 y_pred = clf.predict(X_test) 打印预测结果: y_pred array ( , , , ..., , , ]) 这样看不出来什么。让我们调用Scikit-learn的 classification_report 模块,生成分析报告。 from sklearn.metrics import classification_report print(classification_report(y_test, y_pred)) precision recall f1-score support 0 0 . 89 0 . 86 0 . 87 1595 1 0 . 51 0 . 58 0 . 54 405 avg / total 0 . 81 0 . 80 0 . 81 2000 经检测,决策树在咱们的数据集上,表现得还是不错的。总体的准确率为0.81,召回率为0.80,f1分数为0.81,已经很高了。对10个客户做流失可能性判断,它有8次都能判断正确。 但是,这样是否足够? 我们或许可以调整决策树的参数做优化,尝试改进预测结果。 或者我们可以采用 深度学习 。 深度 深度学习的使用场景,往往是因为原有的模型经典机器学习模型过于简单,无法把握复杂数据特性。 我不准备给你讲一堆数学公式,咱们动手做个实验。 请你打开 这个网址 。 你会看到如下图所示的深度学习游乐场: 右侧的图形,里面是蓝色数据,外圈是黄色数据。你的任务就是要用模型分类两种不同数据。 你说那还不容易?我一眼就看出来了。 你看出来没有用。通过你的设置,让机器也能正确区分,才算数。 图中你看到许多加减号。咱们就通过操纵它们来玩儿一玩儿模型。 首先,点图中部上方的2 HIDDEN LAYERS左侧减号,把中间隐藏层数降低为1。 然后,点击2 neurons上面的减号,把神经元数量减少为1。 把页面上方的Activation函数下拉框打开,选择“Sigmoid”。 现在的模型,其实就是经典的逻辑回归(Logistic Regression)。 点击左上方的运行按钮,我们看看执行效果。 由于模型过于简单,所以机器绞尽脑汁,试图用一条直线切分二维平面上的两类节点。 损失(loss)居高不下。训练集和测试集损失都在0.4左右,显然不符合我们的分类需求。 下面我们试试增加层数和神经元数量。这次点击加号,把隐藏层数加回到2,两层神经元数量都取2。 再次点击运行。 经过一段时间,结果稳定了下来,你发现这次电脑用了两条线,把平面切分成了3部分。 测试集损失下降到了0.25左右,而训练集损失更是降低到了0.2以下。 模型复杂了,效果似乎更好一些。 再接再厉,我们把第一个隐藏层的神经元数量增加为4看看。 点击运行,不一会儿有趣的事情就发生了。 机器用一条近乎完美的曲线把平面分成了内外两个部分。测试集和训练集损失都极速下降,训练集损失甚至接近于0。 这告诉我们,许多时候模型过于简单带来的问题,可以通过加深隐藏层次、增加神经元的方法提升模型复杂度,加以改进。 目前流行的划分方法,是用隐藏层的数量多少来区分是否“深度”。当神经网络中隐藏层数量达到3层以上时,就被称为“深度神经网络”,或者“深度学习”。 久闻大名的深度学习,原来就是这么简单。 如果有时间的话,建议你自己在这个游乐场里多动手玩儿一玩儿。你会很快对神经网络和深度学习有个感性认识。 框架 游乐场背后使用的引擎,就是Google的深度学习框架Tensorflow。 所谓框架,就是别人帮你构造好的基础软件应用。你可以通过调用它们,避免自己重复发明轮子,大幅度节省时间,提升效率。 支持Python语言的深度学习的框架有很多,除了Tensorflow外,还有PyTorch, Theano和MXNet等。 我给你的建议是,找到一个你喜欢的软件包,深入学习使用,不断实践来提升自己的技能。 千万不要 跟别人争论哪个深度学习框架更好。一来萝卜白菜各有所爱,每个人都有自己的偏好;二来深度学习的江湖水很深,言多有失。说错了话,别的门派可能会不高兴哟。 我比较喜欢Tensorflow。但是Tensorflow本身是个底层库。虽然随着版本的更迭,界面越来越易用。但是对初学者来说,许多细节依然有些过于琐碎,不容易掌握。 初学者的耐心有限,挫折过多容易放弃。 幸好,还有几个高度抽象框架,是建立在Tensorflow之上的。如果你的任务是 应用 现成的深度学习模型,那么这些框架会给你带来非常大的便利。 这些框架包括Keras, TensorLayer等。咱们今天将要使用的,叫做TFlearn。 它的特点,就是长得很像Scikit-learn。这样如果你熟悉经典机器学习模型,学起来会特别轻松省力。 实战 闲话就说这么多,下面咱们继续写代码吧。 写代码之前,请回到终端下,运行以下命令,安装几个软件包: pip install tensorflow pip install tflearn 执行完毕后,回到Notebook里。 我们呼叫tflearn框架。 import tflearn 然后,我们开始搭积木一样,搭神经网络层。 首先是输入层。 net = tflearn.input_data(shape= ) 注意这里的写法,因为我们输入的数据,是特征矩阵。而经过我们处理后,特征矩阵现在有11列,因此shape的第二项写11。 shape的第一项,None,指的是我们要输入的特征矩阵行数。因为我们现在是搭建模型,后面特征矩阵有可能一次输入,有可能分成组块输入,长度可大可小,无法事先确定。所以这里填None。tflearn会在我们实际执行训练的时候,自己读入特征矩阵的尺寸,来处理这个数值。 下面我们搭建隐藏层。这里我们要使用深度学习,搭建3层。 net = tflearn.fully_connected(net, 6 , activation= 'relu' ) net = tflearn.fully_connected(net, 6 , activation= 'relu' ) net = tflearn.fully_connected(net, 6 , activation= 'relu' ) activation刚才在深度学习游乐场里面我们遇到过,代表激活函数。如果没有它,所有的输入输出都是线性关系。 Relu函数是激活函数的一种。它大概长这个样子。 如果你想了解激活函数的更多知识,请参考后文的学习资源部分。 隐藏层里,每一层我们都设置了6个神经元。其实至今为之,也不存在最优神经元数量的计算公式。工程界的一种做法,是把输入层的神经元数量,加上输出层神经元数量,除以2取整。咱们这里就是用的这种方法,得出6个。 搭好了3个中间隐藏层,下面我们来搭建输出层。 net = tflearn.fully_connected(net, 2 , activation= 'softmax' ) net = tflearn.regression(net) 这里我们用两个神经元做输出,并且说明使用回归方法。输出层选用的激活函数为softmax。处理分类任务的时候,softmax比较合适。它会告诉我们每一类的可能性,其中数值最高的,可以作为我们的分类结果。 积木搭完了,下面我们告诉TFlearn,以刚刚搭建的结构,生成模型。 model = tflearn.DNN(net) 有了模型,我们就可以使用拟合功能了。你看是不是跟Scikit-learn的使用方法很相似呢? model.fit(X_train, y_train, n_epoch= 30 , batch_size= 32 , show_metric= True ) 注意这里多了几个参数,我们来解释一下。 n_epoch :数据训练几个轮次。 batch_size :每一次输入给模型的数据行数。 show_metric :训练过程中要不要打印结果。 以下就是电脑输出的最终训练结果。其实中间运行过程看着更激动人心,你自己试一下就知道了。 Training Step: 7499 | total loss:  array ( ) 我们就用它来预测一下分类结果。 y_pred = model.predict(X_test) 打印出来看看: y_pred array ( , dtype=float32) 模型判断该客户不流失的可能性为0.70956731。 我们看看实际标签数据: y_test array ( ) 客户果然没有流失。这个预测是对的。 但是一个数据的预测正确与否,是无法说明问题的。我们下面跑整个测试集,并且使用evaluate函数评价模型。 score = model.evaluate(X_test, y_test) print( 'Test accuarcy: %0.4f%%' % (score * 100 )) Test accuarcy : 84 .1500 % 在测试集上,准确性达到84.15%,好样的! 希望在你的努力下,机器做出的准确判断可以帮助银行有效锁定可能流失的客户,降低客户的流失率,继续日进斗金。 说明 你可能觉得,深度学习也没有什么厉害的嘛。原先的决策树算法,那么简单就能实现,也可以达到80%以上的准确度。写了这么多语句,深度学习结果也无非只提升了几个百分点而已。 首先,准确度达到某种高度后,提升是不容易的。这就好像学生考试,从不及格到及格,付出的努力并不需要很高;从95分提升到100,却是许多人一辈子也没有完成的目标。 其次,在某些领域里,1%的提升意味着以百万美元计的利润,或者几千个人的生命因此得到拯救。 第三,深度学习的崛起,是因为大数据的环境。在许多情况下,数据越多,深度学习的优势就越明显。本例中只有10000条记录,与“大数据”的规模还相去甚远。 学习资源 如果你对深度学习感兴趣,推荐以下学习资源。 首先是教材。 第一本是 Deep Learning ,绝对的经典。 第二本是 Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems ,深入浅出,通俗易懂。 其次是MOOC。 推荐吴恩达(Andrew Ng)教授在Coursera上的两门课程。 一门是机器学习。这课推出有年头了,但是非常有趣和实用。具体的介绍请参考拙作《 机器学习哪里有这么玄? 》以及《 如何用MOOC组合掌握机器学习? 》。 一门是深度学习。这是个系列课程,包括5门子课程。今年推出的新课,自成体系,但是最好有前面那门课程作为基础。 讨论 你对深度学习感兴趣吗?之前有没有做过深度学习项目?你掌握了哪些深度学习框架?有没有什么建议给初学者?欢迎留言,把心得分享给大家,我们一起交流讨论。 如果你对我的文章感兴趣,欢迎点赞,并且微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)。 如果本文可能对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。让他们一起参与到我们的讨论中来。 延伸阅读 数据科学相关文章合集(玉树芝兰)
13680 次阅读|1 个评论
一篇文章讲清楚人工智能、机器学习和深度学习的区别和联系
热度 12 zsfreefly 2017-10-25 10:39
人工智能的浪潮正在席卷全球,诸多词汇时刻萦绕在我们耳边:人工智能(Artificial Intelligence)、机器学习(Machine Learning)、深度学习(Deep Learning)。不少人对这些高频词汇的含义及其背后的关系总是似懂非懂、一知半解。 为了帮助大家更好地理解人工智能,这篇文章用最简单的语言解释了这些词汇的含义,理清它们之间的关系,希望对刚入门的同行有所帮助。 图一 人工智能的应用 人工智能:从概念提出到走向繁荣 1956年,几个计算机科学家相聚在达特茅斯会议,提出了“人工智能”的概念,梦想着用当时刚刚出现的计算机来构造复杂的、拥有与人类智慧同样本质特性的机器。其后,人工智能就一直萦绕于人们的脑海之中,并在科研实验室中慢慢孵化。之后的几十年,人工智能一直在两极反转,或被称作人类文明耀眼未来的预言,或被当成技术疯子的狂想扔到垃圾堆里。直到2012年之前,这两种声音还在同时存在。 2012年以后,得益于数据量的上涨、运算力的提升和机器学习新算法(深度学习)的出现,人工智能开始大爆发。据领英近日发布的《全球AI领域人才报告》显示,截至2017年一季度,基于领英平台的全球AI(人工智能)领域技术人才数量超过190万,仅国内人工智能人才缺口达到500多万。 人工智能的研究领域也在不断扩大,图二展示了人工智能研究的各个分支,包括专家系统、机器学习、进化计算、模糊逻辑、计算机视觉、自然语言处理、推荐系统等。 图二 人工智能研究分支 但目前的科研工作都集中在弱人工智能这部分,并很有希望在近期取得重大突破,电影里的人工智能多半都是在描绘强人工智能,而这部分在目前的现实世界里难以真正实现(通常将人工智能分为弱人工智能和强人工智能,前者让机器具备观察和感知的能力,可以做到一定程度的理解和推理,而强人工智能让机器获得自适应能力,解决一些之前没有遇到过的问题)。 弱人工智能有希望取得突破,是如何实现的,“智能”又从何而来呢?这主要归功于一种实现人工智能的方法——机器学习。 学习人工智能相关技术知识,可了解一下在线教育平台—— 深蓝学院 。深蓝学院是致力于人工智能等前沿科技的在线教育平台。 机器学习:一种实现人工智能的方法 机器学习最基本的做法,是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。 举个简单的例子,当我们浏览网上商城时,经常会出现商品推荐的信息。这是商城根据你往期的购物记录和冗长的收藏清单,识别出这其中哪些是你真正感兴趣,并且愿意购买的产品。这样的决策模型,可以帮助商城为客户提供建议并鼓励产品消费。 机器学习直接来源于早期的人工智能领域,传统的算法包括决策树、聚类、贝叶斯分类、支持向量机、EM、Adaboost等等。从学习方法上来分,机器学习算法可以分为监督学习(如分类问题)、无监督学习(如聚类问题)、半监督学习、集成学习、深度学习和强化学习。 传统的机器学习算法在指纹识别、基于Haar的人脸检测、基于HoG特征的物体检测等领域的应用基本达到了商业化的要求或者特定场景的商业化水平,但每前进一步都异常艰难,直到深度学习算法的出现。 深度学习:一种实现机器学习的技术 深度学习本来并不是一种独立的学习方法,其本身也会用到有监督和无监督的学习方法来训练深度神经网络。但由于近几年该领域发展迅猛,一些特有的学习手段相继被提出(如残差网络),因此越来越多的人将其单独看作一种学习的方法。 最初的深度学习是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并不是一个全新的概念,可大致理解为包含多个隐含层的神经网络结构。为了提高深层神经网络的训练效果,人们对神经元的连接方法和激活函数等方面做出相应的调整。其实有不少想法早年间也曾有过,但由于当时训练数据量不足、计算能力落后,因此最终的效果不尽如人意。 深度学习摧枯拉朽般地实现了各种任务,使得似乎所有的机器辅助功能都变为可能。无人驾驶汽车,预防性医疗保健,甚至是更好的电影推荐,都近在眼前,或者即将实现。 三者的区别和联系 机器学习是一种实现人工智能的方法,深度学习是一种实现机器学习的技术。我们就用最简单的方法——同心圆,可视化地展现出它们三者的关系。 图三 三者关系示意图 目前,业界有一种错误的较为普遍的意识,即“ 深度学习最终可能会淘汰掉其他所有机器学习算法 ”。这种意识的产生主要是因为,当下深度学习在计算机视觉、自然语言处理领域的应用远超过传统的机器学习方法,并且媒体对深度学习进行了大肆夸大的报道。 深度学习,作为目前最热的机器学习方法,但并不意味着是机器学习的终点。起码目前存在以下问题: 1. 深度学习模型需要大量的训练数据,才能展现出神奇的效果,但现实生活中往往会遇到小样本问题,此时深度学习方法无法入手,传统的机器学习方法就可以处理; 2. 有些领域,采用传统的简单的机器学习方法,可以很好地解决了,没必要非得用复杂的深度学习方法; 3. 深度学习的思想,来源于人脑的启发,但绝不是人脑的模拟,举个例子,给一个三四岁的小孩看一辆自行车之后,再见到哪怕外观完全不同的自行车,小孩也十有八九能做出那是一辆自行车的判断,也就是说,人类的学习过程往往不需要大规模的训练数据,而现在的深度学习方法显然不是对人脑的模拟。 深度学习大佬 Yoshua Bengio 在 Quora 上回答一个类似的问题时,有一段话讲得特别好,这里引用一下,以回答上述问题: Science is NOT a battle, it is a collaboration. We all build on each other's ideas. Science is an act of love, not war. Love for the beauty in the world that surrounds us and love to share and build something together. That makes science a highly satisfying activity, emotionally speaking! 这段话的大致意思是,科学不是战争而是合作,任何学科的发展从来都不是一条路走到黑,而是同行之间互相学习、互相借鉴、博采众长、相得益彰,站在巨人的肩膀上不断前行。机器学习的研究也是一样,你死我活那是邪教,开放包容才是正道。 结合机器学习2000年以来的发展,再来看Bengio的这段话,深有感触。进入21世纪,纵观机器学习发展历程,研究热点可以简单总结为2000-2006年的流形学习、2006年-2011年的稀疏学习、2012年至今的深度学习。未来哪种机器学习算法会成为热点呢?深度学习三大巨头之一吴恩达曾表示,“在继深度学习之后,迁移学习将引领下一波机器学习技术”。但最终机器学习的下一个热点是什么,谁用能说得准呢。
24915 次阅读|11 个评论
众源测图与质量评定阶段性总结1
applefl 2017-9-6 11:10
1、论文总结 这段时间看的论文关键词主要是VGI、匹配、PPGIS、质量评定、道路测图等等。主要关注的是质量评定这一块的内容。 从匹配方法上来看,可以分为自动化的方法和人工的方法。自动化的质量评定,思路是先进行匹配,然后比较匹配上的要素之间的差异,比如形状一致性、内容完整性、语义准确性等等。人工方法是选取几个样本区域,对样本区域的要素进行人工匹配和比较。从质量评定的内容来看,大部分论文比较的都是要素的形状、语义、完整性等等。也有学者提出比较要素的节点数,贡献者的分布。有一篇论文是从年度的角度研究德国的OSM要素的质量发展趋势。另外我觉得新颖的一篇是提出了数据成熟度的概念,这个是针对VGI提出的,我觉得很好,当然评价数据成熟度的方法可以继续研究。 PPGIS这一块的研究,基本就是WebGIS2.0用于各行各业,介绍了公众参与的优势,不是我主要研究的内容。 对OSM的研究主要是在OSM刚出来那几年,研究的是OSM的机制、发展趋势、贡献者动机、法律机制等等。 对VGI的研究包括质量评定、融合、VGI数据管理(大数据量的动态道路线存储)、道路测图等等。 匹配这一块,也看到了一些新的方法,比如地标、邻近图、道路网眼、矢量道路转栅格、知识库规则等等。 另外还有一块内容是研究关联数据的,但是这几年关联数据好像并没有引起广泛的讨论,所以没深入去看。 2、深度学习和数据挖掘 看到大数据和人工智能这么火,所以这段时间还看了两本相关的书,《数据挖掘十大算法》和《深度学习方法及应用》。 2.1 数据挖掘 数据挖掘的十大算法分别是: C4.5:类似于决策树,通过学习属性到类别的映射,生成决策树,利用各种知识对树进行优化 k-means:用于聚类,设定初始聚类中心,分类,重新计算聚类中心,如此迭代收敛 SVM:用于分类,找到支持向量,生成决策函数,用来分类 Apriori:频繁模式挖掘,提出了频繁模式的几个定理,在此基础上建立的挖掘频繁模式的算法 EM:期望最大化算法,处理数据不完整问题的迭代算法,包括期望步骤和最大化步骤。知乎上有个通俗易懂的例子,刘总和小章的故事。简单来说就是先设定一个初始概率,计算在初始概率下,期望最大的结果,根据当前期望最大的结果去估计下一轮概率,迭代计算至收敛。 PageRank:基于链接的网页排序。将链接比作投票,链接数越多说明该网页越重要,以此计算网页权重。 Adaboost:将多个弱分类器,通过推举的方法生成强分类器。 kNN:从训练集中找出k个最接近测试对象的训练对象,从k个训练对象中找出主导类别,即为测试对象类别。 Naive Bayes:朴素贝叶斯,就是最简单的贝叶斯分类,找概率最大的类别 CART:分类和回归树,决策树中的一系列方法,如:缺失值处理、权重分配、剪枝、树选择等等。 2.2 深度学习 看了那本深度学习的书,结果并没怎么看懂,后来还是在网上百度到的各种深度学习入门总结,网页收藏里应该有。那天提到深度学习,老板说深度学习就是神经网络。在我看来,深度学习有几点不同: 1、训练样本一般都比较大,通过大量的样本训练能保证学习到尽可能多的情况。普通神经网络的方法存在过度训练的问题,而深度学习应该不会,因为深度学习网络的层数很多,因此参数很多。 2、训练方式,深度学习是一层一层的训练的,叫做wake-sleep算法,wake阶段是认知的过程,也就是“如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的”。sleep阶段是生成过程也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念”。这样可以保证每一层都尽量不损失信息 在深度学习中还有一些概念必须知道。 自动编码器和解码器,这个就是把训练样本最原始的表达转换为计算机能理解的表达形式,拿图像来说,就是将图像转换为特征,第一层编码器将图像转为初级特征,高层编码器再将初级特征转换为高级特征。 稀疏编码,就是某个类别的样本只激活尽量少的神经元,模拟大脑的神经元激活方式。 卷积神经网络,图像中每个像元只与附近的像元有强关联,直接将像元灰度值输入神经元就忽略了这种联系,通过先做卷积的方式可以保持这种联系,而且可以大量减少神经网络的参数。
个人分类: 阶段性总结|1 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-24 21:31

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部