深度学习-入门与实践

生物神经网络与深度学习对比

(1)生物神经网络:

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

(2)人工神经网络:

是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。在工程与学术界也常直接简称为“神经网络”或类神经网络。

(3)深度学习:

是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。

(4)大脑神经网络与深度学习神经网络图:

大脑神经网络

深度学习神经网络

大脑神经元的结构

深度学习神经元结构
深度学习方式

深度学习方式作用

(1)监督学习:

概念:监督学习是使用已知正确答案的示例来训练网络
案例:验证码识别,动物分类,数学规律归纳公式

(2)非监督学习:

概念: 无监督学习适用于具有数据集但无标签(无正确答案)的情况。无监督学习采用输入集,并尝试查找数据中的模式,比如,将其组织成群(聚类)或查找异常值(异常检测)
案例: youtube在未经过训练的情况下自动筛选出有猫的视频

(3)半监督学习:

概念: 半监督学习在训练阶段结合了大量未标记的数据和少量标签数据。
案例:

(4)[深度]强化学习:

概念:强化学习是一种通过主体(Agent)与环境(Environment)交互而进行学习的方法。它既不属于有监督学习,也不属于无监督学习。它的目标是要通过与环境(Environment)交互,根据环境的反馈(Reward),优化自己的策略(Policy),再根据策略行动(Action),以获得更多更好的反馈奖励(Reward)。
案例:alpha go,机器人玩游戏,机器人投篮

常用神经网络

(1)BP神经网络(BP)

(2)卷积神经网络(CNN)

(3)循环神经网络 (RNN)

(4)递归神经网络 (RNN)

(5)自编码神经网络 (Auto-Encoders)

(6)长短期记忆神经网络(LSTM)

(7)生成式对抗网络 (GAN)

(8)[深度]强化学习

详细可参考- 深度学习-常用神经网络

BP神经网络的详细介绍

前向传播与后向传播过程示意图

(1)前向传播

多层前馈神经网络由一个输入层、一个或者多个隐藏层、一个输出层组成,数据通过输入层流向隐藏层最后通过输出层输出结果,将这一过程称为前向传播。

(2)后向传播

训练模型时,根据前先传播输出的结果Oi与正确标签值的误差值E来调整神经元之间的权重和偏置值,这个过程称为后向传播(back propagation)。多层前馈神经网络与后向传播算法组成的神经网络叫BP神经网络。

(3)单个神经元的数学体现

神经网络单元j

如上图,给定隐藏层或输出层的单元j,则单元j的净输入为Ij:


单元j的净输入

公式中wij是由上一层的单元i到单元j的连接权重;
Oi是上一层的单元i的输出;
Θj是单元j的偏置,该偏置充当阀值,用来改变神经元的活性;
Oi与Oj的值是在经过激活函数计算后得出,若定义激励函数为sigmoid,单元j的净输入为Ij,输出为Oj,则Oj的输出值为:


单元j的输出

(4)后向传播权重与偏置值调整计算

由损失函数通过梯度下降法对权重、偏置求偏导,并根据偏导结果来更新权重值和偏置值。具体的计算过程可参考:搞懂深度学习到底需要哪些数学知识

(5)模型训练终止条件

如果满足条件之一,就可以停止训练,如下所示:

前一周期所有的△wij都太小,小于某个指定的阀值。
前一周期误分类的元组百分比小于某个阀值。
超过预先指定的周期数。

实践中,权重收敛可能需要数十万个周期。神经网络的训练有很多的经验和技巧,比如我们就可以使用一种称为模拟退火的技术,使神经网络确保收敛到全局最优。

(6)以上1-4训练步骤执行流程如下图(tensorflow运行动态图)所示

tensorflow 运行原理图

上图关键词解析:
input : 输入
Reshape:对输入值转换成张量(可以看成矩阵)
ReLu Layer/Logit Layer:总体可以看成隐藏层与输出层,里面包含神经元之间的权重和偏置

Rectified linear:激励函数 f(x)=max(0,x)
Class Labels:正确标签值
Cross Entropy:交叉熵,损失函数的一种
Softmax:用来分类的函数
Gradients:梯度下降
SGD Trainer:随机梯度下降训练器

从数据进入输入层开始(input),经过塑形将输入数据转换成张量(Reshape),进入隐藏层(ReLu Layer)与Wh1,bh1完成运算、再经过输出层(logit layer)完成与Wsm、bsm的运算,最后通过softmax函数输出各个分类的概率从而完成前向传播,若在训练过程中则用交叉熵函数(crossEntropy)计算正确标签(Class Labels)与输出结果分类概率的误差,再通过梯度下降法、后向传播的方式更新权重与偏置(update Wh1,updte bh1,update Wsm,update bsm)。

BP神经网络代码实践(tensorflow)

(1)代码案例

#coding:utf-8
import tensorflow as tf
import numpy as np

#输入数据
x_data = np.linspace(-1,1,300)[:, np.newaxis] #取-1到1的等差数列的1行300列的矩阵
noise = np.random.normal(0,0.05, x_data.shape) #产生正态分布的跟x_data一样维度数组的噪声
y_data = np.square(x_data)-0.5+noise #对x_data平方后减0.5加噪声(标签值)

#输入层
with tf.name_scope('input_layer'): #输入层。将这两个变量放到input_layer作用域下,tensorboard会把他们放在一个图形里面
    xs = tf.placeholder(tf.float32, [None, 1], name = 'x_input') # xs起名x_input,会在图形上显示 None:行不定,1列
    ys = tf.placeholder(tf.float32, [None, 1], name = 'y_input') # ys起名y_input,会在图形上显示

#隐层
with tf.name_scope('hidden_layer'): #隐层。将隐层权重、偏置、净输入放在一起
    with tf.name_scope('weight'): #权重
        W1 = tf.Variable(tf.random_normal([1,10])) #定1个输入,10个神经元(10个输出),权重初始化为正态分布
        tf.summary.histogram('hidden_layer/weight', W1) #画图
    with tf.name_scope('bias'): #偏置
        b1 = tf.Variable(tf.zeros([1,10])+0.1) #10个神经元的10个偏置值,初始值为0.1
        tf.summary.histogram('hidden_layer/bias', b1) #画图
    with tf.name_scope('Wx_plus_b'): #净输入
        Wx_plus_b1 = tf.matmul(xs,W1) + b1 #输入xs矩阵与W1矩阵乘积 ,左边矩阵列数等于右边行数
        tf.summary.histogram('hidden_layer/Wx_plus_b',Wx_plus_b1) #画图
output1 = tf.nn.relu(Wx_plus_b1) #通过relu激活函数后往下一层输出

#输出层
with tf.name_scope('output_layer'): #输出层。将输出层权重、偏置、净输入放在一起
    with tf.name_scope('weight'): #权重
        W2 = tf.Variable(tf.random_normal([10,1])) #输出层有10个输入值,1个输出值
        tf.summary.histogram('output_layer/weight', W2)
    with tf.name_scope('bias'): #偏置
        b2 = tf.Variable(tf.zeros([1,1])+0.1)
        tf.summary.histogram('output_layer/bias', b2)
    with tf.name_scope('Wx_plus_b'): #净输入
        Wx_plus_b2 = tf.matmul(output1,W2) + b2
        tf.summary.histogram('output_layer/Wx_plus_b',Wx_plus_b2)
output2 = Wx_plus_b2

#损失
with tf.name_scope('loss'): #损失
    loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-output2),reduction_indices=[1])) #300个输出与标签值用二次损失函数(square)计算后求和(reduce_sum)再平均,得到loss损失值
    tf.summary.scalar('loss',loss)
with tf.name_scope('train'): #训练过程
    train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #后向传播的过程,通过学习率为 0.1的梯度下降法(GradientDescentOptimizer),最小化损失(minimize)为目的,来更新权重和偏置值

#初始化
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
merged = tf.summary.merge_all() #将图形、训练过程等数据合并在一起
writer = tf.summary.FileWriter('logs',sess.graph) #将训练日志写入到logs文件夹下
saver = tf.train.Saver() #保存神经网络模型

#训练
for i in range(1000):
    sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
    if(i%50==0): #每50次写一次日志
        result = sess.run(merged,feed_dict={xs:x_data,ys:y_data}) #计算需要写入的日志数据
        writer.add_summary(result,i) #将日志数据写入文件

#保存训练后的模型
save_path = saver.save(sess, "logs/save_net.ckpt")
print("Save to path: ", save_path)

(2)代码参数在tensorboard中的表现

平方损失函数值趋向收敛
代码整体流程体现
隐藏层--权重值变化

隐藏层--偏置值变化

隐藏层-- Wx_plus_b1 = tf.matmul(xs,W1) + b1
输出层--权重值变化

输出层 --偏置值变化

输出层 --Wx_plus_b2 = tf.matmul(output1,W2) + b2
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 第二个Topic讲深度学习,承接前面的《浅谈机器学习基础》。 深度学习简介 前面也提到过,机器学习的本质就是寻找最...
    我偏笑_NSNirvana阅读 15,570评论 7 49
  • 蓝幽幽的冷光闪烁在黑暗 行走在你的领地肆无忌惮 血腥能激发你无穷的欲望 用实力开拓...
    触摸那片曙光阅读 147评论 2 1
  • 眨眼间中旬要过去了。今天一早去查体了,结果。。。囊肿积液息肉包块,老毛病又犯了,医生建议手术。心情很沉重,有点透不...
    圈_圈_阅读 128评论 0 0
  • 投资有风险,入市需谨慎。这是投资界的警示。但是在互联网金融中,似乎没有人来警示,而且各种隐蔽的技巧,让投资人也摸不...
    爱健康菌阅读 442评论 5 3