深度学习简易入门

作者 : jennyxia , 腾讯 MelonTeam 团队

深度学习是机器学习中的一个重要的方向,深度学习其实就是神经网络学习,这里“深度”就是说神经网络中众多的层。

那么深度学习是用来干嘛的呢?简单说,那就是...

分类

关于什么是机器学习的解释,Quora上有一个买菜大妈都能看的懂的回答。翻译一下就是,吃遍南山区所有芒果的大妈,自己总结出个大颜色黄的比较好吃,所以买芒果的时候,直接挑选了这种。那什么是机器学习呢,就是你告诉机器每一个芒果的特征(颜色,大小,软硬等),并且告诉机器其输出(好不好吃),剩下的就等机器去学习出一套规则,这些芒果就是你的训练集。而当你再丢芒果进去的时候,已然熟悉基本法的机器就会直接告诉你这个芒果好不好吃,这种能自动对输入的东西进行分类的机器,就叫做分类器。

分类器的目标就是让正确分类的比例尽可能高。一般我们需要首先收集一些样本,人为标记上正确分类结果,然后用这些标记好的数据训练分类器,训练好的分类器就可以在新来的特征向量上工作了。

神经元

我们再来看看神经网络是怎么工作的。

最简单地把这两组特征向量分开的方法是什么呢?当然是在两组数据中间画一条竖直线,直线左边是-,右边是+,分类器就完成了。以后来了新的向量只要代入公式,h = ax + b ,凡是落在直线左边的都是-,落在右边的都是+。这是二维空间的分类,而当特征有很多种时,我们就要在n维空间做分类,大家可以想象一下,就是用一个n-1维超平面把n维空间一分为二,两边分属不同的两类,,这种分类器就叫做神经元,a是权值,a0是偏移。

这么一画是不是就很像人脑的神经元呀,我们就用这些神经元组成网络去学习训练集的数据,求出最优的权值(weights)和偏置(biases)以便最终正确地分类。

神经网络

上图就是一个简单神经网络的架构,网络中最左边的一层被称作输入层,其中的神经元被称为输入神经元(input neurons)。最右边的一层是输出层(output layer),包含的神经元被称为输出神经元(output neurons)。网络中间的一层被称作隐层(hidden layer),在一些网络中往往有多个隐层。我们可以看到,输入向量连到许多神经元上,这些神经元的输出又连到一堆神经元上,这一过程可以重复很多次。数值向量在不同神经元之间传导。

但是,我们刚刚分析了神经元,神经元的变换是完全的线形的,如果神经网络的每层都只是做线性变换,多层输入叠加后也还是线性变换。因为线性模型的表达能力不够,所以需要激活函数来引入非线性因素。举个栗子,常用的激活函数sigmoid

函数,可以将实数压缩到[0,1]之间。激活函数是神经网络强大的基础,好的激活函数(根据任务来选择)还可以加速训练。

接下来,确定了神经网络的连接方式、网络的层数、每层的节点数,建好网络模型之后,我们要开始学习这个神经网络的每个连接上的权值了。

训练网络(training)

训练过程就是用训练数据的input经过网络计算出output,再和label计算出loss,再计算出gradients来更新weights的过程。label就是训练集里预先加上的分类标记,loss就是你算出的结果与正确结果(正确为1,错误为0)的误差,或者叫损失。

那么training其实就是通过梯度下降法尽可能缩小loss的过程。如下图所示,我们希望loss值可以降低到右侧深蓝色的最低点。

具体步骤如下:

  • 正向传递:算当前网络的预测值 (Relu是一种激活函数,Wh1、Wh2、W0是权重,b是偏移量)
  • 计算loss:
  • 计算梯度:从loss开始反向传播计算每个参数(parameters)对应的梯度(gradients)。这里用Stochastic Gradient Descent (SGD) 来计算梯度,即每次更新所计算的梯度都是从一个样本计算出来的。
  • 更新权重:这里用最简单的方法来更新,即所有参数都
  • 预测新值:训练过所有样本后,打乱样本顺序再次训练若干次。训练完毕后,当再来新的数据input,就可以利用训练的网络来预测了。这时的output就是效果很好的预测值了。

PS 以上理论知识和公式来自斯坦福大学计算机视觉实验室推出的课程CS231n: Convolutional Neural Networks for Visual Recognition

调戏Tensorflow Playground

接下来,摩拳擦掌想要试一试深度学习的朋友们可以试着调戏一下TensorFlow Playground。TensorFlow游乐场是一个通过网页浏览器就可以训练的简单神经网络,并实现了可视化训练过程的工具。下图就是TensorFlow游乐场默认设置的截图。

左边的每组数据,都是不同形态分布的一群点。每一个点,都与生俱来了2个特征:x1和x2,表示点的位置。数据中的点有2类:橙色和蓝色。我们这个神经网络的目标,就是通过训练,知道哪些位置的点是橙色、哪些位置的点是蓝色。如何确定网络结构呢?到底用不用隐层呢?还是一个隐层?两个隐层或更多?每个层的尺寸该多大?这些都可以在TP上调整,而且立刻就能看到直观的结果。快去试试吧~

TensorFlow 安装(Windows)

最后奉上大杀器,谷歌2015年开源的主流深度学习框架TensorFlow的官方安装指南 https://www.tensorflow.org/install/install_windows, windows上的安装会有一些小小的坑,遇到安装问题可以询问我哦。

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

jennyxia的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

引用次数最多的七篇深度学习论文出自谁手?Hinton、Yoshua榜上有名(理解/泛化/迁移篇)

编者按:我们通常都会学习前辈或大牛的经典作品,而引用次数自然也成为了论文的一个重要标杆。在 GitHub 上,大神 @Terryum 整理了一份精心编写的论文推...

3478
来自专栏机器之心

学界 | 极端图像压缩的生成对抗网络,可生成低码率的高质量图像

选自arXiv 作者:Eirikur Agustsson等 机器之心编译 参与:白妤昕、刘晓坤 本文提出了一个基于生成对抗网络的极端学习图像压缩框架,能生成码率...

2905
来自专栏机器之心

资源 | 神经网络告诉我,谁是世界上最「美」的人?

选自TowardsDataScience 作者:Dima Shulga 机器之心编译 参与:路、刘晓坤 「魔镜魔镜告诉我,谁是世界上最美的女人?」这句伴随童年的...

2754
来自专栏人工智能LeadAI

BAT机器学习面试1000题系列(第76~149题)

76、看你是搞视觉的,熟悉哪些CV框架,顺带聊聊CV最近五年的发展史如何?深度学习 DL应用 难 原英文:adeshpande3.github.io 作者:Ad...

5558
来自专栏机器之心

业界 | 解释深度神经网络训练全过程:谷歌发布SVCCA

选自Google Research 作者:Maithra Raghu 机器之心编译 参与:李泽南、路雪 SVCCA 是谷歌大脑提出的一个简单、可扩展的工具,可以...

2676
来自专栏人工智能头条

线性分类器 VS 非线性分类器

853
来自专栏量子位

在Keras+TF环境中,用迁移学习和微调做专属图像识别系统

图1:CompCars数据集的示例图像,整个数据集包含163家汽车制造商,1713种车型 王小新 编译自 Deep Learning Sandbox 量子位 出...

3235
来自专栏BestSDK

当今最火10大统计算法,你用过几个?

为什么学习统计学习?理解不同技术背后的理念非常重要,它可以帮助你了解如何使用以及什么时候使用。同时,准确评估一种方法的性能也非常重要,因为它能告诉我们某种方法在...

35810
来自专栏人工智能

如何使用scikit-learn在Python中生成测试数据集

测试数据集是一个微型的手工数据集,你可以用它来测试机器学习算法或者工具。

3846
来自专栏张宏顺的专栏

对 HEVC CU深度快速选择方法的思考和实践

本文主要讲解了HEVC中CU深度的快速选择方法,分析了当前编码中存在的问题,提出解决方案,并给出了具体的实践流程,及得到的收益。

5362

扫码关注云+社区