【ML】西瓜书神经网络学习

本文深入探讨了神经元模型、感知机与多层网络的概念,并重点解析了反向传播(BP)算法的原理及其实现过程。通过一个具体的神经网络例子,展示了如何运用BP算法进行训练,使得网络输出接近0.01和0.99。同时,文章还提及了全局最小和局部最小在优化过程中的影响。
摘要由CSDN通过智能技术生成

一、神经元模型

在这里插入图片描述

二、感知机与多层网络

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、反向传播算法(BP算法)

1.BP算法的原理

----BP算法是迄今为止最成功的神经网络算法,现实任务中使用神经网络时,大多是在使用BP算法进行训练。BP算法不仅可以用于多层前馈神经网络,还可以用于其他类型的网络,例如训练递归网络。但通常说”BP网络“时,一般是指用BP算法训练的多层前馈神经网络。
----下面我们来看看BP算法究竟是什么样。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.BP算法的简单代码实现

以上述神经网络为例,实现BP算法,使网络的输出趋近0.01与0.99。

import numpy as np

w = [0, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65]
b = [0, 0.35, 0.65]
l = [0, 5, 10]

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

def bp(w, b, l):
    # 1. 前向传播, 计算预测值与误差
    net_h1 = w[1]*l[1] + w[2]*l[2] + b[1]
    out_h1 = sigmoid(net_h1)
    net_h2 = w[3]*l[1] + w[4]*l[2] + b[1]
    out_h2 = sigmoid(net_h2)
    net_h3 = w[5]*l[1] + w[6]*l[2] + b[1]
    out_h3 = sigmoid(net_h3)
    
    net_o1 = w[7]*out_h1 + w[9]*out_h2 + w[11]*out_h3 + b[2]
    out_o1 = sigmoid(net_o1)
    net_o2 = w[8]*out_h1 + w[10]*out_h2 + w[12]*out_h3 + b[2]
    out_o2 = sigmoid(net_o2)

    e = 0.5 * (np.square(0.01-out_o1) + np.square(0.99-out_o2)) 
    
    # 2. 后向传播, 更新权重
    eta = 0.5
    t1 = -(0.01 - out_o1) * out_o1 * (1 - out_o1)
    t2 = -(0.99 - out_o2) * out_o2 * (1 - out_o2)
    
    w[7] = w[7] - eta*t1*out_h1
    w[9] = w[9] - eta*t1*out_h2
    w[11] = w[11] - eta*t1*out_h3
    w[8] = w[8] - eta*t2*out_h1
    w[10] = w[10] - eta*t2*out_h2
    w[12] = w[12] - eta*t2*out_h3

    w[1] = w[1] - eta * (t1*w[7] + t2*w[8]) * out_h1*(1-out_h1) * l[1]
    w[2] = w[2] - eta * (t1*w[7] + t2*w[8]) * out_h1*(1-out_h1) * l[2]
    w[3] = w[3] - eta * (t1*w[9] + t2*w[10]) * out_h2*(1-out_h2) * l[1]
    w[4] = w[4] - eta * (t1*w[9] + t2*w[10]) * out_h2*(1-out_h2) * l[2]
    w[5] = w[5] - eta * (t1*w[11] + t2*w[12]) * out_h3*(1-out_h3) * l[1]
    w[6] = w[6] - eta * (t1*w[11] + t2*w[12]) * out_h3*(1-out_h3) * l[2]
    
    return out_o1, out_o2, w, e

for i in range(1000):  # 迭代次数
    out_o1, out_o2, w, e = bp(w, b, l)
    print("第{}次迭代:预测结果为({:.6f} {:.6f}), 总误差为{:.6f} 权重系数为{}".format(i+1, out_o1, out_o2, e, w))
print("训练结束!")

四、全局最小与局部最小

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值