神经网络种类
- 神经网络基础:单层感知器,线性神经网络, BP神经网络, Hopfield神经网络等
神经网络进阶:玻尔兹曼机,受限玻尔兹曼机,递归神经网络等 深度学习网络:深度置信网络,卷积神经网络,深度残差网络, LSTM网络等
深度网络应用:应用于传统的数据挖掘与机器学习问题,手写体识别,图像识别, 应用于自然语言处理,人工智能: AlphaGo等
- 编程语言: python, R, matlab, java等
- 深度学习实现框架: Tensorflow,Caffe,Torch等
大牛们
Geoffrey Hinton
英国出生的计算机学家和心理学家,以其在神经网络方面的贡献闻名。 Hinton是反向传播算法和对比散度算法的发明人之一,也是深度学习的积极推动者。
Yann LeCun
计算机科学家,他最著名的工作是光学字符识别和计算机视觉上使用卷积神经网络( CNN), 他也被称为卷积网络之父。
2013年12月加入了
Facebook, 成为Facebook人工智能实验室的第一任主任。
Yoshua Bengio
毕业于麦吉尔大学,在MIT和贝尔实验室做过博士后研究员,自1993年之后在蒙特利尔大学任教。在预训练问题,自动编码器降噪等领域做出重大贡献。
Andrew Wu(吴恩达)
曾经是斯坦福大学计算机科学系和电气工程系的副教授,斯坦福人工智能实验室主任。他还与达芙妮科勒一起创建了在线教育平台Coursera。
2011年,吴恩达在Google创建了Google Brain项目,通过分布式集群计算机开发超大规模的人工神经网络。
2014年5月,吴恩达加入百度,负责百度大脑计划,并担任百度公司首席科学家。
单层感知器
举例
b=-0.6
x1x1 | x2x2 | x3x3 | Y |
---|---|---|---|
0 | 0 | 0 | -1 |
0 | 0 | 1 | -1 |
0 | 1 | 0 | -1 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | -1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
把偏置当做特殊权值
感知器学习规则
感知器具有单层计算单元的神经网络结构,其学习规则规定,学习信号是神经元期望输出与实际输出之差:
其中
感知器采用符号函数为转换函数,表达为:
因此,权值调整公式为:
当实际输出与期望相同时,权值不需要调整;在有误差存在情况下,简化为
感知器学习规则只适用于二进制神经元,初始权值可取任意值。
学习率
- η学习率(0<η≤1)η学习率(0<η≤1)
- 学习率太大,容易造成权值调整不稳定。
收敛条件
收敛条件通常可以是:
误差小于某个预先设定的较小的值。
两次迭代之间的权值变化已经很小。
设定最大迭代次数,当迭代超过最大次数就停止。
单层感知器例子
题目:平面坐标三个点(3,3)(4,3)(1,1),标签分别为1,1,-1.构建神经网络分类。
import numpy as np
import matplotlib.pyplot as plt
#输入数据
X = np.array([[1,3,3],
[1,4,3],
[1,1,1]])
#标签
Y = np.array([1,1,-1])
#权值初始化,1行3列,取值范围-1到1
W = (np.random.random(3)-0.5)*2
print(W)
#学习率设置
lr = 0.1
#计算迭代次数
n = 0
#神经网络输出
O = 0
def update():
#更新权值函数
global X,Y,W,lr,n#引用全局变量
n+=1
O = np.sign(np.dot(X,W.T))
W_C = lr*((Y-O.T).dot(X))/int(X.shape[0])
W = W + W_C
for _ in range(100):
update()#更新权值
print(W)#打印当前权值
print(n)#打印迭代次数
O = np.sign(np.dot(X,W.T))#计算当前输出
if(O == Y.T).all(): #如果实际输出等于期望输出,模型收敛,循环结束
print('Finished')
print('epoch:',n)
break
#正样本
x1 = [3,4]
y1 = [3,3]
#负样本
x2 = [1]
y2 = [1]
#计算分界线的斜率以及截距
k = -W[1]/W[2]
d = -W[0]/W[2]
print('k=',k)
print('d=',d)
xdata = np.linspace(0,5)#取一些x坐标轴上的点
plt.figure()
plt.plot(xdata,xdata*k+d,'r')
plt.plot(x1,y1,'bo')#正样本蓝色表示
plt.plot(x2,y2,'yo')#负样本黄色的点表示
plt.show()
分界线表达式:
斜率和截距为
运行结果
