**This is an old revision of the document!**
深度学习教程:从感知到神经网络
本文原作者是Java工程师Ivan Vasilev, 同时作者也开发了Java深度学习库, 大家可以去点赞. 这里我将根据我的理解, 作一记录.
近年来, AI又热门起来了. 她已经走出了学术研究的范畴, 现在Google, Microsoft, Facebook等巨头都拥有他们自己的团队, 而且已经完成了几轮融资.
一方面这源于对社交网络用户产生的大量原始数据分析的需求(毕竟赚钱才是本质, 社交只是形式, 呵呵), 另一方面则应归功于GPGPU带来的便宜而强劲的计算能力.
除此之外, 机器学习的最新动向—深度学习
则为本次复兴注入了强劲的活力. 本教程将会带你:
. 从深度学习最简单的基本单元开始介绍 . 了解深度学习的核心概念与算法 . 最终用Java实践
机器学习30秒入门教程
可以进一步参考机器学习引论.
机器学习的一般过程如下:
- 我们手头有一些算法以及给了标记的
少量
数据, 例如10张标记为1的狗狗图片和另外10张标记为0的非狗狗图片—这里谈到了标记, 请注意本教程主要考虑监督学习(supervised), 二元分类(binary classification). - 我们期望, 让算法
学习区分
这些图片, 然后给一张新的图片, 算法能够正确判断出该图片是狗狗还是非狗狗.
这个例子其实非常具有代表性, 例如数据可以是症状而标签是患有某种疾病与否; 或者数据是手写的字母而标签是它们所代表的真实字母.
感知:早起的深度学习算法
最早的有监督学习算法之一是关于感知器
(perceptron)的, 它是神经网络的基本构成单元.
假设在平面上有$n$个点, 标记为0
和1
. 然后给你一个新的点, 让你猜测它的标签是0还是1, 这正是上面给出的例子的图形化. 我们应该怎么合理的猜呢?
方法之一可能是找出该点附件的标签, 然后将大多数标签定义为该点的标签. 然而一种更高明的方式是恰当的选取一条直线最好的区分这两类标签作为分类依据.
在本例中, 我们将每个数据表示为坐标$x=(x_1,x_2)$, 而我们的函数将在某条直线的下方取值为0, 上方取值为1. 也许你会问在直线上取值为啥?
众所周知, 平面上直线的一般方程是
$$
f(x)=a x_1+bx_2+c,
$$
其中$a,b,c$是参数. 这个函数有时也称为变换函数
(transfer function), 因为它将抽象的分类(在直线上方/下方)具体到$f(x)$的符号. 我们的输出函数
(activation function)则定义为
$$
h(x)=\begin{cases}
1,& \text{if } f(x)>0\\
0,& \text{if } f(x)\leq0.
\end{cases}
$$