Python学习记录 深度学习 如何搭建一个简单的人工神经网络

深度学习

文章目录

  • 深度学习
    • 什么是深度学习
    • 深度学习和机器学习的区别
    • 神经网络(ANN)
      • 什么是神经网络
        • 生物神经网络
        • 人工神经网络
      • 人工神经网络的特点
      • 人工神经网络的优势
      • 人工神经网络分类
      • 感知器
        • 单层感知器
        • 多层感知器
        • 感知器优缺点
          • 优点
          • 缺点
      • 激活函数
        • 常见激活函数
      • BP反向传播神经网络
        • 梯度下降法
    • 构建一个简单的神经网络
      • 目标
      • 背景
      • 创建数据
      • 初始化假设
      • 输入神经元进行计算
      • 输出运行结果
      • 完整代码

什么是深度学习

深度学习是一个复杂的机器学习算法,它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据

深度学习和机器学习的区别

参考知乎

神经网络(ANN)

Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第1张图片

什么是神经网络

Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第2张图片

神经网络可以分为生物神经网络和人工神经网络,人工神经网络是模仿生物神经网络设计的,一般分为三层:分别是输入曾输出层和隐藏层
隐藏层是计算机模拟人脑的过程

生物神经网络

生物神经网络(Biological Neural Networks)一般指生物的大脑神经元,细胞,触点等组成的网络,用于产生生物的意识,帮助生物进行思考和行动

人工神经网络

人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。

人工神经网络的特点

  • 具有自我学习功能
  • 具有联想存储功能
  • 具有高速寻找优化解的能力

人工神经网络的优势

人工神经网络完成非常轻松得完成下面5类功能

  • 模式分类
  • 聚类
  • 回归与拟合
  • 优化计算
  • 数据压缩

人工神经网络分类

根据拓扑结构分为向前网络反馈网络

  • 向前网络是网络中各个神经元接收前一级的输入,并输出到下一级,没有反馈,可以用一个有向无环路图表示,例如:感知器、BP神经网络
  • 反馈网络是网络内神经元间的反馈,这种神经网络的信息处理是状态的变换,可以用一个无向的完备图表示,例如:BAM双向联想记忆网络

感知器

感知器是人工神经网络中的一种典型结构,它的主要的特点是结构简单,对所能解决的问题 存在着收敛算法,并能从数学上严格证明,从而对神经网络研究起了重要的推动作用。

单层感知器

输入和输出端之间没有隐藏层,只能分类简单线性可分的模型(比如二分类),只能画出一条直线
常见于非线性决策边界
Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第3张图片
Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第4张图片

多层感知器

输入和输出端之间多了隐藏层
可以实现非线性分类,并且可以画多条直线
Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第5张图片

感知器优缺点

优点

模型简单,易于实现

缺点

无法完美得处理线程不可分得训练数据
最终结果受训练集的数据影响很大

激活函数

实现神经元输入和输出的非线性化。加入非线性因素,可以画曲线
Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第6张图片

常见激活函数

Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第7张图片
Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第8张图片
Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第9张图片
Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第10张图片

BP反向传播神经网络

用于对神经网络进行优化,对超参数的部分进行模拟,直到修正到完美的参数
比如:真实值是100 预测值是101,算超参数,进行修正,直到预测值变成100
常用梯度下降法

梯度下降法

梯度下降法是一种求解局部函数极小值点迭代优化算法
给定一个点、计算当前的导数,沿着导数正负反向取值,得到新的点,最后重复之前的步骤,不断重复,直到满足最终条件
Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第11张图片

构建一个简单的神经网络

你已经学会了上面的理论,现在来构建一个最简单的神经网络来预测D要不要去爬山吧!

目标

根据A、B、C、D的爬山数据,预测D去不去爬山

背景

A、B、C、D经常一起去爬山
用1表示去爬山 0表示没去爬山
前5次数据是
A B C D
0 1 0 1
1 1 0 1
1 0 1 0
0 0 1 0
0 1 1 1
需要预测的数据:
A B C D
0 1 0 ?

创建数据

引入库

import numpy as np

前五次数据可以用矩阵进行表示
ABC去爬山的数据可以作为输入

X = np.array([[0,1,0],[1,1,0],[1,0,1],[0,0,1],[0,1,1]])

D的数据可以作为输出

Y = np.array([[1],[1],[0],[0],[1]])

初始化假设

用随机数做假设,假设D去不去爬山和ABC去不去爬山之间相关系数的权重为weights

np.random.seed(1)
weights = 2 * np.random.random((3,1))-1

输入神经元进行计算

假设weights算出的值接近0,表示D不去爬山的可能性大,反之接近1则去爬山的可能性大
使用前五次D、的数据Y - 利用假设关系得到的output数值 最后得到误差error
通过不断循环调整假设关系weights,减少误差,最终得到误差最小的一组关系系数weights

for it in range(100000):
	output = 1/(1+np.exp(-np.dot(X,weights)))
	error = Y - output
	delta = error * output *(1-output)
	weights += np.dot(X.T,delta)

输出运行结果

print("误差为:\n",error)
print("相关系数为:\n",weights)
probability = 1/(1+np.exp(-np.dot([[0,1,0]],weights)))
print("D去爬山的概率为:\n",probability)

Python学习记录 深度学习 如何搭建一个简单的人工神经网络_第12张图片

可以看到D去爬山的概率为0.999

完整代码

import numpy as np
# 创建数据
X = np.array([[0,1,0],[1,1,0],[1,0,1],[0,0,1],[0,1,1]])
Y = np.array([[1],[1],[0],[0],[1]])
# 初始化假设
np.random.seed(1)
weights = 2 * np.random.random((3,1))-1
# 输入神经元进行计算
for it in range(100000):
	output = 1/(1+np.exp(-np.dot(X,weights)))
	error = Y - output
	delta = error * output *(1-output)
	weights += np.dot(X.T,delta)
# 输出运行结果
print("误差为:\n",error)
print("相关系数为:\n",weights)
probability = 1/(1+np.exp(-np.dot([[0,1,0]],weights)))
print("D去爬山的概率为:\n",probability)

你可能感兴趣的:(Python,python,学习,深度学习)