机器学习-神经网络(西瓜书)
神经网络
5.1 神经元模型
在生物神经网络中,神经元之间相互连接,当一个神经元受到的外界刺激足够大时,就会产生兴奋(称为"激活"),并将剩余的"刺激"向相邻的神经元传导。

神经元模型
模型中 x i x_i xi表示各个神经元传来的刺激,刺激强度有大有小,所以 w i w_i wi表示不同刺激的权重,Θ表示阈值。一段刺激经过加权汇总再减去神经元的阈值后,经过激活函数 f f f处理,就是一个输出y,它如果不为0,那么y就会作用到其他神经元当中,就如同 x i x_i xi一样作为输入。
前面提到的激活函数 f f f一般表示为:
s i g m o i d ( x ) = 1 1 + e − x sigmoid(x) = \frac{1}{1+e^{-x}} sigmoid(x)=1+e−x1
5.2 感知机与多层网络
- 感知机能快速实现与,或,非逻辑运算,它由两层神经元组成,输入层接受信号好传递到输出层,并在输出层进行激活函数处理。

输出计算方法为:
y = f ( ∑ i w i x i − Θ ) y = f(\sum_{i}w_ix_i-Θ) y=f(i∑wixi−Θ)
以"与"运算为例( x 1 x_1 x1交 x 2 x_2 x2):令两个w值为1,Θ(阈值)为2,则有
y = f ( 1 × x 1 + 1 × x 2 − 2 ) y=f(1×x_1+1×x_2-2) y=f(1×x1+1×x2−2)
只在x均为1时,y才为1
- 常见的神经网络如下图所示的层级结构,每层神经元与下一层的互相连接,称为"多层前馈神经网络",神经网络学习到的内容,存在于前面提到的连接权 w i w_i wi和阈值 Θ Θ Θ里。

5.3 误差逆传播算法(简称BP)
多层网络的学习能力强于单层感知机,可以用BP算法进行训练,通过计算实际输出与期望输出之间的误差,再将这份误差反向传播到网络的每一层,从而调整网络中的权重,这个过程会迭代进行,直到训练效果达到预期。
累计误差表示为:
E = 1 m ∑ k = 1 m E k E=\frac{1}{m}\sum^m_{k=1}E_k E=m1k=1∑mEk
具体步骤的伪代码为:
1.初始化网络的权重和阈值
2.对于每个训练样本,进行前向传播计算:将输入样本传递给输入层计算隐藏层的输出,使用激活函数(前面提到的Sigmoid函数)将隐藏层的输出传递给输出层,再次使用激活函数
3.计算输出层的误差(期望输出与实际输出的差值)
4.反向传播误差:根据误差和激活函数的导数,计算输出层的梯度将输出层的梯度传播回隐藏层,再根据权重调整梯度更新隐藏层到输出层的权重把隐藏层的梯度传播回输入层,根据权重调整梯度更新输入层到隐藏层的权重
5.重复2-4步骤,直到达到预定的训练次数或者收敛了
6.使用训练好的网络进行预测
BP神经网络经常出现"过拟合"现象,表现为:训练误差持续降低,测试误差上升。解决的方法有两种:
- 第一种是"早停":把数据集分为训练集和验证集,前者就是做上述伪代码的工作,即计算梯度,更新权重等;验证集用来估计误差(如分类任务中的分类准确率),当出现训练误差减小但验证误差提升时,停止训练,同时返回具有最小验证集误差的权重和阈值。
- 第二种是"正则化",在误差目标函数中加入一个描述网络复杂度的部分,通过对模型的复杂度进行惩罚(如限制模型的参数或权重的大小)来防止过拟合
深度学习
深度学习模型通过"增加隐层"的数目,提高训练效率,降低过拟合的风险。

以第二章的手写体识别为例,网络输入是一个32×32的手写数字图像,输出是算法的识别结果,过程以伪代码的形式呈现。
对所有手写数字文本将加载的32×32矩阵转为一行1024的向量把文本对应的数字转化为one-hot向量(某个值为1,其余均为0)
构建神经网络:设置网络的隐藏层数,各隐藏层神经元个数,激活函数学习率,优化方法,最大迭代次数
做测试
隐藏层中的神经元能直接影响网络的学习能力,但是如果数量过多容易导致出现过拟合现象,选取合适参数的方法有
- 手动筛选:给定一个范围,如:比较50,100,500的效果,如果200的效果优于其他两者,那么就从50到100间再选择一个数值,但这个方法有点慢
- 正则化技术:以L1正则化(L1 Regularization)为例:L1正则化通过在损失函数中添加参数的绝对值之和,来惩罚模型中的大参数。这导致一些参数变为零,从而实现特征选择和稀疏性。L1正则化可以促使模型更加稀疏,即只有少数参数对模型的预测起作用,其他参数趋近于零。
实验:比较隐藏层不同神经元个数的多层感知机的实验效果
(学习率均为0.0001,迭代次数为2000)
clf = MLPClassifier(hidden_layer_sizes=(100,),activation='logistic', solver='adam',learning_rate_init=0.0001, max_iter=2000)
print(clf)
变量为神经元个数,分别是50,100,500,1000




实验分析:神经元个数从50逐渐升到500个的过程中,网络对目标特征的抓取能力逐渐提升,所以识别的正确率随之提高。但在个数跳到1000时正确率没有提高,可能是因为个数在达到1000之前,多层感知机就已经收敛了,个数继续增加相当于时过度训练数据,提高网络复杂度,这并不会带来增益。能测试的变量还有迭代次数和学习率。
相关文章:
机器学习-神经网络(西瓜书)
神经网络 5.1 神经元模型 在生物神经网络中,神经元之间相互连接,当一个神经元受到的外界刺激足够大时,就会产生兴奋(称为"激活"),并将剩余的"刺激"向相邻的神经元传导。 神经元模型…...
Apache StreamPark系列教程第二篇——项目打包和开发
一、项目打包 项目依赖maven、jdk8.0、前端(node、npm) //下载代码 git clone//maven打包相关内容 mvn -N io.takari:maven:wrapper //前端打包相关内容 curl -sL https://rpm.nodesource.com/setup_16.x | bash - yum -y install nodejs npm -v npm install -g pnpm默认是h2…...
Visual Studio 2022的MFC框架——WinMain函数
我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 大家还记得创建Win32应用程序是怎么弄的吗? Win32应用程序的建立到运行是有一个个关系分明的步骤的: 1.进入W…...
9. 解谜游戏
目录 题目 Description Input Notes 思路 暴力方法 递归法 注意事项 C代码(递归法) 关于DFS 题目 Description 小张是一个密室逃脱爱好者,在密室逃脱的游戏中,你需要解开一系列谜题最终拿到出门的密码。现在小张需要打…...
fastjson利用templatesImpl链
fastjson1.2.24 环境: pom.xml: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoc…...
OpenCV 开启O3优化
opencv默认没有开启O3优化选项,需要进行手动设置,下面是一种优化方法: 方法一 在 /opencv-4.5.5/cmake/OpenCVCompilerOptions.cmake 中的第 269 行做出以下修改: # 修改前 set(OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXT…...
css background实现四角边框
2023.8.27今天我学习了如何使用css制作一个四角边框,效果如下: .style{background: linear-gradient(#33cdfa, #33cdfa) left top,linear-gradient(#33cdfa, #33cdfa) left top,linear-gradient(#33cdfa, #33cdfa) right top,linear-gradient(#33cdfa, #…...
摆动序列【贪心算法】
摆动序列 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 class Solution {public int wiggleMaxLength(int…...
【Terraform学习】使用 Terraform创建 S3 存储桶事件(Terraform-AWS最佳实战学习)
本站以分享各种运维经验和运维所需要的技能为主 《python》:python零基础入门学习 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…...
自定义String字符串工具类 StringUtils.java
自定义String字符串工具类 StringUtils.java 简介 自定义String字符串工具类 api 是否为空 checkEmpty(String str);目标字符串是目标数组中的一个 checkContains(String str, String[] target);限制最大长度 checkMaxLength(String str, Long l);是否纯数字的字符串 check…...
mongTemplate实现group分组查询aggregation
MongoService封装 <T> List<T> group(Class<T> clazz, Aggregation aggregation,String documentName); MongoServiceImpl实现类 Overridepublic <T> List<T> group(Class<T> clazz, Aggregation aggregation,String documentName) {//…...
防御网络攻击风险的4个步骤
如今,人们正在做大量工作来保护 IT 系统免受网络犯罪的侵害。令人担忧的是,对于运营技术系统来说,情况却并非如此,运营技术系统用于运行从工厂到石油管道再到发电厂的所有业务。 组织应该强化其网络安全策略,因为针对…...
相机SD卡数据丢失如何恢复?
出门在外,相机是人们记录生活点滴的重要工具,是旅游的最佳玩伴。人们每到一个地方,都喜欢用相机来见证自己来过的痕迹,拍好的照片都会被放到相机卡里,但在使用相机时,有时我们会意外删除了重要的照片或视频…...
Java小记-矩阵转置
对于给定的一个二维矩阵,请转置后进行输出。 输入描述 对于一个n*m的矩阵,输入有n行,每行是m个以空格分隔的数字。 输出描述 n*m矩阵的转置矩阵。输出m行,每行是n个空格分隔的数据。 import java.io.*; import java.util.*;pub…...
计网-控制平面
下个月前最后一篇计网笔记,再坚挺一下,网络如同海洋,任我穿梭遨游~~ ——题记 大多数的算法更新,就是枚举 路由器与交换机的区别 文章目录 概述小白Dilistra:w的邻域按权值排序,v[w,i]min(c[w,i],v[w,i-1]c[i-1,i],...…...
Markdown 扩展语法练习
风无痕 August 26, 2023 Markdown 指南中文版 Markdown 入门指南Markdown 基本语法Markdown 扩展语法Markdown 基本语法练习Markdown 扩展语法练习 代码 <h3 id"table">表格</h3>| Syntax | Description | | --- | --- | | Header | Title | | Paragrap…...
ubuntu上安装boost库为SOMEIP的X86和ARM下编译做准备(编译两种版本)
1 X86架构Linux(ubuntu)操作系统上Boost库的编译安装1.1 Boost源码下载1.2 编译选项配置1.3 编译 Boost 库1.4安装 Boost 库2 Boost库的ARM架构编译1 X86架构Linux(ubuntu)操作系统上Boost库的编译安装 Boost库是C++拓展库,是SOMEIP源码编译所必需的库。编译 Boost 库时,…...
[NSSCTF 2nd] NSS两周年纪念赛。
都说开卷有益,其实作题也有益,每打一次总能学到点东西。 PWN NewBottleOldWine 这个没作出来,一时还不明白RISC-V64怎么弄本地环境,不过看了WP感觉很简单,取flag用不着环境。 IDA不给翻译了,一点点看汇…...
【星戈瑞】FITC-PEG-N3在细胞示踪中的应用
欢迎来到星戈瑞荧光stargraydye!小编带您盘点: FITC-PEG-N3在细胞示踪中具有多样性应用。细胞示踪是指使用荧光标记物追踪和观察细胞在体内或体外的位置、迁移、增殖等行为。以下是FITC-PEG-N3在细胞示踪中的主要应用方面: 1. 细胞迁移研究…...
【Linux】【驱动】自动创建设备节点
【Linux】【驱动】自动创建设备节点 续驱动代码操作指令linux端从机端 续 这里展示了如何自动的方式去创建一个字符类的节点 下面就是需要调用到的程序 函数 void cdev_init(struct cdev *, const struct file_operations *);第一个参数 要初始化的 cdev 第二个参数 文件操作…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
