深度学习(4)——BP算法感知器神经网络线性神经网络BP神经网络

前言:从感知器开始引出神经元,感知器中的激活函数进行改进,引入全连接神经网络,只要并且重点介绍一下BP神经网络

感知器神经网络

也就01分类器,给定阈值,解决二分类问题。类似于前面提到的二值化,例如:对分数就行排名的时候通常让大于60分的认定为“及格”。至于添加大于八十分为“优秀”只需要在添加一个感知器即可,由于神经网络模拟的是人的思考过程,既给定一个输入,会产生一个输出,人的决策过程是众多神经元的结果,下面就来分析简单的感知器神经网络对分类产生的结果。人脑分布如下下图:

  • 神经元 前面已经提到过,现在简单附属一下。既,输入、输出、激活函数。
  • 感知器 就是当激活函数返回值为两个值时候为感知器

缺点: 由于输出结果为固定的两个值,当就行参数优化的时候,要么输出不变,要么输出突然变化,参数优化不容易实现,所以通常用sigmoid函数作为激活函数

线性神经网络

可以做多分类问题 添加少量隐层的神经网络就叫做浅层神经网络;也叫作传统神经网络, 一般为2隐层的神经网络。 用sigmoid的缺点是同城隐层只能是两层,由于激活函数特殊的限制,通常在迭代求导的过程中,sigmoid函数的导数会向零方向逼近,造成“死神经元”

tanh函数效果好一点,可任然解决不了隐层多的问题,引入relu函数

BP神经网络

神经网络的一种求解W的算法,分为信号“正向传播(FP)”求损失,“反向 传播(BP)”回传误差;根据误差值修改每层的权重,继续迭代

分别求出 输出层误差

隐层的误差

输入层误差

用代码来实现BP算法的过程如下:

import numpy as np

w = [0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65]
# 偏置项b不进行更新
b = [0.35, 0.65]
l = [-5, 10]


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


def f1(w, b, l):
    # 前向传播,计算结果值
    h1 = sigmoid(w[0] * l[0] + w[1] * l[1] + b[0])
    h2 = sigmoid(w[2] * l[0] + w[3] * l[1] + b[0])
    h3 = sigmoid(w[4] * l[0] + w[5] * l[1] + b[0])

    o1 = sigmoid(w[6] * h1 + w[8] * h2 + w[10] * h3 + b[1])
    o2 = sigmoid(w[7] * h1 + w[9] * h2 + w[11] * h3 + b[1])

    # 后向传播,更新w
    t1 = -(0.1 - o1) * o1 * (1 - o1)
    t2 = -(0.99 - o2) * o2 * (1 - o2)

    w[6] = w[6] - 0.5 * (t1 * h1)
    w[8] = w[8] - 0.5 * (t1 * h2)
    w[10] = w[10] - 0.5 * (t1 * h3)
    w[7] = w[7] - 0.5 * (t2 * h1)
    w[9] = w[9] - 0.5 * (t2 * h2)
    w[11] = w[11] - 0.5 * (t2 * h3)

    w[0] = w[0] - 0.5 * (t1 * w[6] + t2 * w[7]) * h1 * (1 - h1) * l[0]
    w[1] = w[1] - 0.5 * (t1 * w[6] + t2 * w[7]) * h1 * (1 - h1) * l[1]
    w[2] = w[2] - 0.5 * (t1 * w[8] + t2 * w[9]) * h2 * (1 - h2) * l[0]
    w[3] = w[3] - 0.5 * (t1 * w[8] + t2 * w[9]) * h2 * (1 - h2) * l[1]
    w[4] = w[4] - 0.5 * (t1 * w[10] + t2 * w[11]) * h3 * (1 - h3) * l[0]
    w[5] = w[5] - 0.5 * (t1 * w[10] + t2 * w[11]) * h3 * (1 - h3) * l[1]

    return o1, o2, w


for i in range(1001):
    r1, r2, w = f1(w, b, l)
    print("第{}次迭代后,结果值为:({},{}),权重更新为:{}".format(i, r1, r2, w))

输出结果:

第1000次迭代后,结果值为:(0.09996083954832574,0.9778184034399262),权重更新为:[-0.030672263069416547, 0.41134452613883266, 0.09476393030400698, 0.4604721393919862, 0.20319883709854172, 0.5436023258029161, -0.9980730809431909, 0.9438220932399313, -0.8629482660589612, 1.0419668423034139, -1.0146000749780355, 1.181504874794456]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习思考者

机器学习——Dropout原理介绍

一:引言   因为在机器学习的一些模型中,如果模型的参数太多,而训练样本又太少的话,这样训练出来的模型很容易产生过拟合现象。在训练bp网络时经常遇到的一个问题,...

7428
来自专栏小鹏的专栏

Faster RCNN:RPN,anchor,sliding windows

paper链接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal N...

93410
来自专栏人工智能

第四课反向传播算法与神经网络(一)

Stanford深度学习课程第四课反向传播算法与神经网络(一) 预备知识 我们不直接介绍课程内容,首先介绍一些预备知识,这样可以更好的理解课程内容。下面我们介绍...

2086
来自专栏大数据智能实战

空洞卷积与DeeplabV2实现图像语义分割的测试(tensorflow)

图像语义分割是对图像像素级理解的基础,也是图像处理的高阶操作。自从深度学习出来之后,已经有了不少的基于卷积网络的图像语义分割模型,如从全卷积网络到大型卷积核:深...

5399
来自专栏CreateAMind

RCNN- 将CNN引入目标检测的开山之作

https://www.zhihu.com/question/35887527/answer/147832196

1402
来自专栏人工智能LeadAI

CNN卷积神经网络分析

CNN最大的优势在特征提取方面。由于CNN的特征检测层通过训练数据进行学习,避免了显示的特征抽取,而是隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经...

1221
来自专栏CSDN技术头条

卷积神经网络CNN

本文学习笔记的部分内容参考zouxy09的博客,谢谢! http://blog.csdn.net/zouxy09/article/details/8775360...

2977
来自专栏新智元

谷歌官方:反向传播算法图解

【新智元导读】反向传播算法(BP算法)是目前用来训练人工神经网络的最常用且最有效的算法。作为谷歌机器学习速成课程的配套材料,谷歌推出一个演示网站,直观地介绍了反...

1600
来自专栏深度学习计算机视觉

BP神经网络总结笔记

概念背景(来自百度百科) BP神经网络的代表者是D.Rumelhart和J.McCelland,“反向传播(backpropagation)”一词的使用出现在1...

2823
来自专栏专知

深度学习目标检测从入门到精通:第一篇

【导读】近日,CV-Tricks.com发布一篇文章,总结了近年来目标检测的各种方法。目标检测可谓是近年来计算机视觉领域热门的研究领域,也具有广阔的应用前景,如...

8506

扫码关注云+社区

领取腾讯云代金券