神经网络(一)
2018-11-25 本文已影响160人
Daily_Note
神经网络
1. 神经网络基础
2. 浅层神经网络分析
3. 卷积神经网络
4. 卷积神经网络MNIST数字图片识别
1. 神经网络基础
神经网络:想让计算机模拟大脑处理信息的过程。
如:有一杯水,手摸一下,收集温度信息,在神经元中进行传递,心中有一个默认值,看是否温度太高,还是太低。
- 感知机
- 最早的基于神经网络的分类问题。
- 有n个数据,通过权重与各数据之间的计算和,比较激活函数结果,得出输出(和线性回归特别像)。有一个阈值,输出超过阈值要干什么,不超过阈值要做什么。
- 感知机解决的是分类的问题,线性回归解决回归问题。
- 应用:很容易解决与,或,非问题。
- x1,x2两个特征值,w1,w2两个权值。
- 与:所有输入为1,输出为1,否则为0。w1=1,w2=1,阈值为1.5,只有输入(1,1)的输出值为1。
- 或:只要有一个为1,输出就为1。
- 异或问题:相同为0,不同为1,使用一个感知机无法很好的划分。(单个感知机解决不了的问题,可以增加感知机)
- 逻辑回归:sigmoid,激活函数,进行分类。
- 人工神经网络
-
神经网路的发展
- 定义:在机器学习和认知科学领域,人工神经网络(artificial neural network,缩写ANN),简称神经网络(:neural network,缩写NN)或类神经网络,是一种模仿生物神经网络的结构和功能的计算模型,用于对函数进行估计或近似。
- 种类:
- 基础神经网络:单层感知器,线性神经网络,BP神经网络,Hopfield神经网络等。
- 进阶神经网络:玻尔兹曼机,受限玻尔兹曼机,递归神经网络等。
- 深度神经网络:深度置信网络,卷积神经网络,循环神经网络,LSTM网络等。
- 杰弗里·埃弗里斯特·辛顿。(英语:Geoffrey Everest Hinton)是一位英国出生的计算机学家和心理学家,以其在神经网络方面的贡献闻名。辛顿是反向传播算法的发明人之一,也是深度学习的积极推动者。
- 上个世纪七八十代的时候,神经网路的雏形已经出现了,但是不被大多人所接受,主要由于神经网络的分类过程无法解释,觉得没有用,只有Hinton带着它的团队坚持到了现在。
-
神经网络
- 感知机-->神经元-->多个-->神经网络
- 特点:
- 输入向量的维度和输入神经元的个数相同
- 每个连接都有权值
- 同一层神经元之间没有连接
- 由输入层,隐层,输出层组成
- 第N层和N-1层的所有神经元连接,也叫全连接层。
- 组成:
- 结构:神经网络中的变量可以是神经元连接的权重
- 激活函数:大部分神经网络模型具有一个短时间尺度的动力学规则,来定义神经元如何根据其他神经元的活动来改变自己的激励值。
- 学习规则:学习规则制定了网络中的权值如何随着时间推进而调整。(反向传播算法)
神经网络用于多分类问题。某一个样本-->得出属于全部类别的每一个概率。(softmax).有多少个类别,输出就是多少个值。
- 神经网络API
- tf.nn:提供神经网络相关操作的支持,包括卷积操作(conv)、池化操作(pooling)、归一化、loss、分类操作、embedding、RNN、Evaluation。(能体会到一步一步怎么做的。)
- tf.layers:主要提供的高层的神经网络,主要和卷积相关的,对tf.nn的进一步封装。
- tf.contrib:tf.contrib.layers提供能够将计算图中的网络层、正则化、摘要操作、是构建计算图的高级操作,但是tf.contrib包不稳定以及一些实验代码。
-
2. 浅层神经网络分析
-
softmax回归
softmax.png
神经元的输出值,经过softmax得出每一个分类的概率值。
softmax回归解释
- 损失计算
算法 | 策略 | 优化 |
---|---|---|
线性回归 | 均方误差 | 梯度下降 |
逻辑回归 | 对数似然损失 | 梯度下降 |
神经网络 | 交叉熵损失 | 梯度下降,反向传播算法 |
正向传播:输入经过一层层的计算得出输出
反向传播:从损失计算开始,梯度下降更新权重
-
交叉熵损失:
交叉熵.png
image.png-
一个样本就有一个交叉熵损失,求所有样本的损失,然后求平均损失。
image.png
如图所示,softmax得出的类别概率为左边的数字,样本的实际类别为右边的数字(使用了one-hot编码),用交叉熵的公式求出损失值,越小说明越准确,若softmax得出的类别概率与实际的一模一样,则交叉熵损失值为0。
-
- API介绍
- 全连接-从输入直接到输出
- tf.matmul(a, b, name=None)+bias
- return:全连接结果,供交叉损失运算
- 不需要激活函数(因为是最后的输出)
- tf.matmul(a, b, name=None)+bias
- SoftMax计算、交叉熵
- tf.nn.softmax_cross_entropy_with_logits(labels=None,logits=None,name=None)
- 计算logits和labels之间的交叉熵损失熵
- labels:标签值(真实值)
- logits:样本加权之后的值
- return:返回损失值列表
- 损失值列表平均值计算
- tf.reduce_mean(input_tensor)
- tf.nn.softmax_cross_entropy_with_logits(labels=None,logits=None,name=None)
- 损失下降API
- tf.train.GradientDescentOptimizer(learning_rate)
- learning_rate:学习率
- minimize(loss):最小化损失
- return:梯度下降op
- tf.train.GradientDescentOptimizer(learning_rate)
- 全连接-从输入直接到输出