深度学习入门(一) 从感知机到神经网络

 一、前言      

        第一次接触AI应该是大学的数据挖掘课,老师布置过一个课题是用matlab实现手写数字识别,当时没太认真

学。只依稀记得有个什么k-近邻算法,现在想想这应该是一种有监督的分类算法。

        毕业后从事了java开发,但天天curd没能磨灭我对人工智能的向往(有可能是觉得AI很酷炫,有可能是被高

薪资吸引,也有可能单纯是做java做累了想换下口味,所以总结下来就是“向往”,而谈不上“热爱”)。

        为此我倒是买了不少书,什么周志华机器学习、花书、模式分类,甚至还有一本计算机视觉方面研究生课程

的书。然而我的自学计划并不顺利,主要原因应该是数学基础太差,其次是自己的意志力不够,没能持之以恒。

另外不得不承认的是,随着年龄增长,加上这些年生活的颓废,自己能感觉到自己的IQ有比较明显的下滑。

        总之走了很多弯路。

        直到最近,我为了复习python,偶然发现一本好书。这本书叫《深度学习入门:基于Python的理论与实

现》,优点是几乎零基础就能学。我准备先看完这本书,再去回看花书。

 

二、感知机

        感知机(perceptron)由美国学者Frank Rosecnblatt于1957年提出,是神经网络(深度学习)的起源算法。

如下图所示,这是一个接受两个输入信号的感知机的例子。图中的圈称为“神经元”或者“节点”。             

       

这是神经元是否被激活公式, 其中x1、x2是输入信号,w1、2是权重,b是偏置,y=1表示神经元被激活。

        下面我们将使用感知机来实现基本逻辑电路。首先列出每种逻辑计算的真值表,然后将真值表转化为

直角坐标系上的点,以便于观察。

(1)以下按顺序分别是“与”、“与非”、“或”的真值表、直接坐标系点分布图、python代码实现。

 

 

 

(2)通过观察“异或”在直角坐标系的点位图,我们发现无论如何我们都无法用一条直线分开0和1(线性空间),

但是用曲线可以(非线性空间)。右下为实现“异或”所使用的python代码,这里可以理解为一个双层感知机。

 

 

三、从感知机到神经网络

1. 激活函数(将输入信号的总和转化成输出信号)

(1)激活函数以阈值为界,一但输出超过阈值,就切换函数,这就是阶跃函数。阶跃函数总是输出0和1。

(2)sigmoid函数(平滑的),输出值介于(0,1)之间。

python代码:

def sigmoid(x):
    return 1/(1+np.exp(-x))
    

 

注意,神经网络的激活函数必须使用非线性的,否则加深神经网络的层数将变得毫无意义。

(3)Relu函数(Rectified Linear Unit)

python代码:

def relu(x):
    return np.maximum(0, x)

 

 最近面试需要突击java,没空看这个,这个系列的学习先搁置。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                              

posted @ 2022-01-26 20:04  方山客  阅读(49)  评论(0编辑  收藏  举报