(深度学习)神经网络基础

一、神经网络定义
playground http://playground.tensorflow.org 通过这个地址了解神经网络
1.人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),分别输入层,输出层以及隐藏层
2.特点:每个连接都有个权值,同一层神经元之间没有连接,最后的输出结果对应的层也称之为全连接层
3.感知机(PLA: Perceptron Learning Algorithm))
(深度学习)神经网络基础_第1张图片
1)激活函数:激活函数的主要作用是给线性输出的结果添加一个非线性变换,经过非线性变换后的神经网络具备拟合各种线性和非线性模型的能力。激活函数可以是任何函数,常用的函数sigmoid(逻辑回归)、tanh、relu、softmax函数
Sigmoid 函数,其值域是0到1之间,它的输出还可以被拟合为事件成功的概率。
Sigmoid函数的阈值为0.5,我们在构造一个分类模型时候,设置小于0.5结果为A类大于0.5的为B类,

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

(深度学习)神经网络基础_第2张图片
早期的人工神经网络用的激活函数sigmoid函数,但是因为反向传播会导致前面隐藏层更新权重非常缓慢,容易造成梯度消失,所以我们采用了ReLU(Rectified linear unit的缩写)。
ReLU函数
(深度学习)神经网络基础_第3张图片
sigmoid函数的导数是sigmoid*(1-sigmoid函数)
反向传播:
反向传播更新权重(梯度下降法),采用求导的链式法则来找到误差域输入层到输入层链接的权重

#构造两层神经网络,用R语言反向传播链式求导
l1 <- expression(x*w1)#输入层乘以权重输出到隐藏层
Z1 <- expression(1/(1+exp(l1)))#第一个隐藏层经过激活函数作为输入到下一个隐藏层
l2 <- expression(z1*w2)#乘以权重
yhat <- expression(1/(1+exp(-l2)))#经过激活函数到输出层
loss=expression((yreal-yhat)^2)
#如下一层一层的链式求导
D(loss,'yhat')
D(yhat,'l2')
D(l2,'w2')
D(Z1,'l1')
D(l1,'w1')

结果:
(深度学习)神经网络基础_第4张图片

2)矩阵的乘dot运算
二、神经网络的原理
1.神经网络解决多分类问题最常用的方法是在全连接层设置n个输出节点,其中n为类别的个数。
例如:我们最终要把数据分成10个类别,则n=10
2.我们把神经网络输出转换乘概率结果:逻辑回归常用于两分类问题,而多分类问题常用softmax回归
用softmax函数求概率,概率最大代表是这一类
(深度学习)神经网络基础_第5张图片
三、神经网络损失:
线性回归:均方误差
逻辑回归:对数似然
神经网络:交叉熵损失
交叉熵损失函数的公式如下:
为了能够衡量距离,目标值需要进行one-hot编码,能与概率值一一对应,如下图
(深度学习)神经网络基础_第6张图片
注:(1).提高对应目标值为1的位置输出概率大小.减少其他位置为0的概率
(2).log1=0
(3).目标值是one_hot编码,预测值:概率分布,所有概率加起来为1
四、神经网络的损失优化
BP算法(Backpropagation)即梯度下降+链式求导规则
1、前向传输(Feed-Forward)

从输入层=>隐藏层=>输出层,一层一层的计算所有神经元输出值的过程。

2、反向(Back Propagation)

因为输出层的值与真实的值会存在误差,我们可以用交叉熵损失来衡量预测值和真实值之间的误差。

在手工设定了神经网络的层数,每层的神经元的个数,学习率 η(下面会提到)后,BP 算法会先随机初始化每条连接线权重和偏置
对于训练集中的每个输入 x 和输出 y,BP 算法都会先执行前向传输得到预测值
根据真实值与预测值之间的误差执行逆向反馈更新神经网络中每条连接线的权重和每层的偏好。
3.softmax、交叉熵损失API

tf.nn.softmax_cross_entropy_with_logits(labels=None, logits=None,name=None)
计算logits和labels之间的交叉损失熵
labels:标签值(真实值)
logits:样本加权之后的值
return:返回损失值列表
tf.reduce_mean(input_tensor)
计算张量的尺寸的元素平均值

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