深层神经网络
深度学习维基百科定义:一类通过多层非线性变换对高复杂性数据建模算法的合集。
线性模型:前向传播算法
只通过线性变换,任意层的全连接神经网络和单层神经网络模型的表达能力没有任何区别,而且他们都是线性模型
ReLU激活函数
激活函数实现去线性化
偏置项bias 加入偏置项bias是因为更加符合实际需要
几种常见的非线性函数有
Relu函数 tf.nn.ReLU f(x)=max(x,0)
Sigmoid函数tf.sigmod f(x)=1/(1+e^(-x))
tanh函数tf.tanh 1-e^(-2x)
f(x)= _________
1+e^(-2x)
多层网络解决异或运算
多层变换
深层神经网络实际上有组合特征提取的功能,该特征对于解决不易提取特征向量的问题有很大帮助
损失函数的定义:分类问题和回归问题是监督学习的两大种类,解决分类问题最常用的方法就是设置N个输出节点
交叉熵刻画了两个概率分布的之间的距离(分类问题中的损失函数)
H(q,p)=-∑p(x)log q(x)
交叉熵刻画的是两个概率分布之间的距离,越小两概率分布就越近,因为神经网络的输出不一定是一个概率分布,所以如何将神经网络向前传播得到的结果也变成概率。所以要用到softmax回归。记载输出层之前加上softmax层
cross_entropy=-tf.reduce_mean(y*tf.log(tf.clip_by_value(y,le-10,1.)))
#y表示正确结果 tf.clip_by_value()可以将一个张量中的数值限制在一个范围之内 le-10为0
eg:V=tf.constant([[1.0,2.0,3.0],[4.0,5.0,6.0]])
print(tf.clip_by_value(V,2.5,4.5).eavl())
#输出为 [[2.5,2.5,3.0],[4.0,4.5,4.5]] 也就是说将V中的值的大小限制到2.5-4.5这个范围里面
tf.log(V)
#是对V进行取对数
*是乘法运算表示的是两个矩阵之间对应元素相乘
tf.matmul(x,y)
#表示两个矩阵相乘
交叉熵的公式,应该将每行中的m个结果相加得到所有样例的交叉熵,然后对这n行取平均得到一个batch的平均交叉熵
所以可以直接对整个矩阵做平均而不改变计算结果的意义
V=tf.constant([[1.0,2.0,3.0],[4.0,5.0,6.0]])
print(tf.reduce_mean(V).eval())
#输出为3.5
因为交叉熵一般会与softmax回归一起使用,所以tf对=其进行了封装并提供了
#其中y代表远视神经网络的输出结果,而y_给出标准答案 即softmax的交叉熵
tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y)
回归问题解决的是对具体数值的预测,其最常用的损失函数是均方误差
mse=tf.reduce_mean(tf.square(y_-y))
自定义损失函数
损失函数定义的是损失,所以当预测利润时定义的损失函数应该刻画成本或者代价
loss=tf.reduce_sum(tf.where(tf.where(tf.greater(v1,v2),(v1-v2)*a,(v2-v1)*b)))
tf.greater的输入是两个张量,当输入张量纬度不一样时tf会进行广播(下面解释广播)
tf.where3个参数第一个为选择条件根据,当选择条件成立,tf’.where会选择第2个参数,否则会选择第3个参数
广播机制*
1.让所有输入数组独享其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐
2.输出数组的shape是输入数组shape的各个轴上的最大值
3.输入数组的某个轴和输出数组的对应轴的长度相同或者长度为1是这数组可以用于计算
4.当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴的第一组值
定义:用以描述numpy中对两个形状不同的阵列进行数字计算的处理机制,较小的阵列“广播”到较大阵列相同的形状尺度上,使他们对等以可以进行数学计算。
神经网络优化算法
如何通过反向传播算法(优化所有参数,且只保证局部最小)和梯度下降算法(优化单个参数)调整神经网络中参数的取值
为什么损失函数值要越小?
损失函数表示的是事件的风险
随机梯度下降法是某一条数据上的损失函数 (batch英文是一批的意思,在此指数据量大,从而将数据分为了很多批,每批的量)
神经网络的进一步优化
指数衰减法设置学习率
#tf.train.expomential_decay如下------->
decayed_learning_rate=learing_rate*decay_rate^(global_step/decay_steps)
#learing_rate初始学习率,decay_rate衰减系数,decay_steps衰减速度
#tf.train.expomential_decay的用法
learning_rate=tf.train.expomential_decay(0.1,global_step,100,0.96,staircase=True)
#staircase 值为false时这时学习率随迭代轮数变化的趋势连续衰减的方式,当设置为true时学习率随迭代轮数变化的趋势阶梯式衰减
过拟合问题
过拟合指的是当一个模型过为复杂之后,他可以很好地“记忆”每一个训练数据中随机噪音的部分而忘记了要去“学习”训练数据中通用的趋势。(通俗的来说,比如这个女孩喜欢吃辣条,吃鸡腿,你给买了所以你成功的吸引了女孩注意成为了吃货组合。你用同样的方法和另一女孩,但是这个女孩喜欢吃鱼,你却买的辣条,所以你不可能成为女孩朋友)
那么怎样解决过拟合,常用的是正则化
R(w1)=||w||1 称 l1 不可导
R(w2)=||W^2||2 称 l2可导
实践中将l1和l2一起使用
滑动平均模型:使模型在测试数据上更健壮 (所有需要计算滑动平均的变量必须为实数型)
关于“广播”我觉得自己理解的不够透彻,路过的大神若有好的方法,哈哈那就留下吧!