神经网络基础 神经网络算法入门

-

今天给大家介绍一份非常好的神经网络入门资料,有基础的同学可能会觉得啰嗦,不如推公式来的直接。但个人觉得直觉式的去理解概念,有时候能更清晰的理解概念的细节和背后的逻辑。而这份资料的作者将概念和直觉联系的特别好,仔细看一遍,加深理解。本篇不是翻译,而是鉴于原文太长,整理一个摘要。当然,英文好的同学可以直接看原文,通俗易懂,链接在文末。

网络基石--perceptrons

为何要从感知机(perceptrons)开始讲,可能是由于它是非常早期被提出来,理解它对于理解后续的概念非常有帮助。台大的林老师在机器学习基石这么课里也花了很多时间来讲它,感知机的定义非常简单:

-
神经网络基础

公式1

林老师在课程里介绍了一个非常简单的模型迭代办法,有兴趣的同学可以去看下。本文要重点指出的是它的另一种定义:

-
神经网络基础

重点理解这里的w和b,b可以理解成是公式1的-threshold,这样改的好处是大家不用关心threshold,且后面b也是可以训练的。另外,大家可以想下,对w和b同时乘以一个正数,上述式子的性质不发生变化。

特别指出,作者举了一个例子:

-
48" alt="神经网络基础" inline="0">

当输入是00,(−2)∗0+(−2)∗0+3=3(−2)∗0+(−2)∗0+3=3为正,即为1,10,01输入的输出也是1,而11输出是0,性质可以看做是一个NAND门,NAND的特质是能够表达出any logical function,比如:

-
神经网络基础

即能说明神经网络能模拟任何函数。当然,如果只是像NAND门一样,通过各种组合能表达任意函数,也没有什么意思,但神经网络是可以学习的,这个就神奇了。

为何sigmoid这么重要

虽然sigmoid会造成梯度消失、爆炸等问题,现在已经不推荐使用了。但它对于理解概念很有帮助。

首先我们了解下机器学习里面使用最广泛的隐式先验,平滑先验(smoothness prior)或者局部不变性先验(local constancy prior)。这个先验表明我们学习的函数不应该在小区域内发生很大的变化。从直觉上理解,当两个样本离得近,大概率是比较像的,即small weight change cause small output change,f(x) 约等于f(x+delta)。其中KNN就是一个极端的例子。

这个先验要求我们的函数最好是smoothness的,我们看下sigmoid函数的图:

-
神经网络基础

它将感知机在threshold上的跳变变成了连续的了,很合适做一个激活函数,再来看:

-
神经网络基础

其中:

-
神经网络基础

可以看出output的变化和w,b的变化是一个线性函数的关系。

到这里才讲了本章的三分之一内容,后面讲了网络结构,梯度下降,最后用python的numpy库实现了一个简单的神经网络,识别mnist的手写数字识别任务。太晚了,剩下的部分后面找机会再写吧。

英文原文:Neural networks and deep learning

推荐访问:神经网络基础 人工神经网络基础 神经网络基础知识