机器学习笔记【Week4】

一、 为什么要用神经网络?

  • 逻辑回归只能处理线性可分问题。
  • 例如,经典的 XOR 异或问题无法用单层逻辑回归准确分类。
  • 神经网络通过多层结构和非线性激活函数,能学习复杂的决策边界,解决非线性问题。

二、神经网络的基本组成

神经网络由多层组成:

层级说明
输入层接收输入特征,比如像素或数值。
隐藏层通过若干个神经元(单元)进行非线性变换。
输出层输出最终结果,如分类概率。

三、神经元和权重的定义

  • 每个神经元代表一个计算单元,输出称为“激活值” a i ( j ) a_i^{(j)} ai(j),表示第 j j j 层第 i i i 个神经元的输出。
  • 每层之间的连接由权重矩阵 Θ ( j ) \Theta^{(j)} Θ(j) 表示,从第 j j j 层到第 j + 1 j+1 j+1 层。
  • 权重矩阵的维度为: s j + 1 × ( s j + 1 ) s_{j+1} \times (s_j + 1) sj+1×(sj+1),其中 s j s_j sj 是第 j j j 层神经元数(不包含偏置单元), + 1 +1 +1 是因为偏置项。

四、前向传播(Forward Propagation)

假设有一个3层神经网络(输入层-隐藏层-输出层),执行前向传播的过程如下:

  1. 输入层激活 a ( 1 ) = x a^{(1)} = x a(1)=x,在输入层加上偏置单元 a 0 ( 1 ) = 1 a_0^{(1)} = 1 a0(1)=1
  2. 计算隐藏层的输入值:

z ( 2 ) = Θ ( 1 ) a ( 1 ) z^{(2)} = \Theta^{(1)} a^{(1)} z(2)=Θ(1)a(1)

这里, z ( 2 ) z^{(2)} z(2) 是隐藏层每个神经元的线性组合输入(权重 * 输入 + 偏置)。

  1. z ( 2 ) z^{(2)} z(2) 使用激活函数(sigmoid)得到隐藏层激活:

a ( 2 ) = g ( z ( 2 ) ) = 1 1 + e − z ( 2 ) a^{(2)} = g(z^{(2)}) = \frac{1}{1 + e^{-z^{(2)}}} a(2)=g(z(2))=1+ez(2)1

  1. 在隐藏层激活前加偏置单元 a 0 ( 2 ) = 1 a_0^{(2)} = 1 a0(2)=1
  2. 计算输出层的输入:

z ( 3 ) = Θ ( 2 ) a ( 2 ) z^{(3)} = \Theta^{(2)} a^{(2)} z(3)=Θ(2)a(2)

  1. 输出层激活:

a ( 3 ) = h Θ ( x ) = g ( z ( 3 ) ) a^{(3)} = h_\Theta(x) = g(z^{(3)}) a(3)=hΘ(x)=g(z(3))

a ( 3 ) a^{(3)} a(3) 就是网络最终的输出,可能是多类分类的概率向量。


五、激活函数:sigmoid 函数

  • 公式:

g ( z ) = 1 1 + e − z g(z) = \frac{1}{1 + e^{-z}} g(z)=1+ez1

  • 作用:
    • 将任意实数映射到 (0, 1) 之间。
    • 模拟生物神经元“激活”的概率。
    • 输出值可解释为概率,方便做分类。
  • 形状:
    • z → + ∞ z \to +\infty z+, g ( z ) → 1 g(z) \to 1 g(z)1
    • z → − ∞ z \to -\infty z, g ( z ) → 0 g(z) \to 0 g(z)0
    • z = 0 z = 0 z=0, g ( z ) = 0.5 g(z) = 0.5 g(z)=0.5

六、神经网络举例:用来实现 XOR 函数

XOR 真值表:

x 1 x_1 x1 x 2 x_2 x2XOR 输出 y y y
000
011
101
110

逻辑回归不能拟合这个非线性边界,但神经网络可以。


七、Python代码示例:手写3层神经网络实现 XOR

import numpy as npdef sigmoid(z):return 1 / (1 + np.exp(-z))# 输入数据:4个样本,2个特征
X = np.array([[0, 0],[0, 1],[1, 0],[1, 1]])
m = X.shape[0]# 添加偏置单元
X = np.hstack((np.ones((m,1)), X))  # shape (4,3)# 手动设定权重参数 Theta
# 输入层到隐藏层 (2隐藏单元 + 偏置),shape = (2,3)
Theta1 = np.array([[-30, 20, 20],    # 模拟AND[10, -20, -20]])  # 模拟NOR# 隐藏层到输出层 (1输出单元 + 偏置), shape = (1,3)
Theta2 = np.array([-10, 20, 20])     # 模拟ORdef forward_propagation(X):# 输入层到隐藏层z2 = X @ Theta1.T          # (4,3) @ (3,2).T => (4,2)a2 = sigmoid(z2)# 添加偏置单元到隐藏层激活a2 = np.hstack((np.ones((m,1)), a2))  # (4,3)# 隐藏层到输出层z3 = a2 @ Theta2.T         # (4,3) @ (3,1) => (4,1)a3 = sigmoid(z3)return a3y_pred = forward_propagation(X)
print("预测结果(概率):\n", y_pred)
print("预测结果(四舍五入):\n", np.round(y_pred))

结果:

预测结果(概率):[[0.0000454 ][0.9999546 ][0.9999546 ][0.0000454 ]]
预测结果(四舍五入):[[0.][1.][1.][0.]]

成功模拟 XOR 输出。


八、神经网络参数维度

层间连接权重矩阵维度
输入层(含偏置)到隐藏层 Θ ( 1 ) ∈ R s 2 × ( s 1 + 1 ) \Theta^{(1)} \in \mathbb{R}^{s_2 \times (s_1 + 1)} Θ(1)Rs2×(s1+1)
隐藏层(含偏置)到输出层 Θ ( 2 ) ∈ R s 3 × ( s 2 + 1 ) \Theta^{(2)} \in \mathbb{R}^{s_3 \times (s_2 + 1)} Θ(2)Rs3×(s2+1)
  • s j s_j sj:第 j j j 层神经元个数,不含偏置。
  • 偏置项在矩阵维度中体现为多加的一列。

九、神经网络如何支持多分类?

  • 输出层每个神经元对应一个类别。
  • 网络输出是一个概率向量,表示输入属于各类别的概率。
  • 常用于 One-vs-All 多分类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java交易所,多语言,外汇,黄金,区块链,dapp类型的,支持授权,划转,挖矿(源码下载)

目前这套主要是运营交易所类型的,授权的会贵点,编译后的是可以直接跑的,图片也修复了,后门也扫了 都是在跑的项目支持测,全开源 源码下载:https://download.csdn.net/download/m0_66047725/90887047 更多…

2025CCPC河北省赛题解

题目区分度不错&#xff0c;不过两题手快铜确实没想到。 Attention is all you need&#xff01; H - What is all you need? 签到题 #include <bits/stdc.h> #define x first #define y second #define int long long #define double long doubleusing namespace st…

【IOS】【OC】【应用内打印功能的实现】如何在APP内实现打印功能,连接本地打印机,把想要打印的界面打印成图片

【IOS】【OC】【应用内打印功能的实现】如何在APP内实现打印功能&#xff0c;连接本地打印机&#xff0c;打印想打印的界面 设备/引擎&#xff1a;Mac&#xff08;14.1.1&#xff09;/cocos 开发工具&#xff1a;Xcode 开发语言&#xff1a;OC/C 开发需求&#xff1a;工程中…

AWS WebRTC:获取信令服务节点和ICE服务节点

建立WebRTC的第一步是获取信令服务节点和ICE服务节点。 前提条件是有访问AWS的密钥&#xff0c;主要是ak&#xff0c;sk&#xff0c;token&#xff0c;我这边是业务云有接口可以返回这些信息&#xff0c;所以我直接从业务云获取。 先介绍一下什么是ak&#xff0c;sk&#xff…

C++23 新成员函数与字符串类型的改动

文章目录 引言std::basic_string::contains 与 std::basic_string_view::contains (P1679R3)功能介绍示例代码优势 禁止从 nullptr 构造 std::basic_string 和 std::basic_string_view (P2166R1)背景改动影响 std::basic_string_view 的显式范围构造函数 (P1989R2)功能介绍示例…

VMware-MySQL主从

MySQL主从 服务器信息 服务器类型角色主机地址主机名称虚拟机master192.168.40.128test-1虚拟机slave192.168.40.129test-2 Master 配置&#xff08;192.168.40.128&#xff09; 删除自动生成的配置 /var/lib/mysql/auto.cnf [roottest-1 ~]# rm -rf /var/lib/mysql/auto.…

Java组合、聚合与关联:核心区别解析

在Java中&#xff0c;组合、聚合和关联是描述类之间关系的三种不同方式&#xff0c;它们的核心区别在于对象间的依赖强度和生命周期管理。以下是它们的详细对比&#xff1a; 1. 关联&#xff08;Association&#xff09; 定义&#xff1a;最基本的类间关系&#xff0c;表示一个…

如何保护网络免受零日漏洞攻击?

零日漏洞&#xff08;Zero-Day Vulnerability&#xff09;是指软件或系统中尚未被厂商发现或修补的安全漏洞。这个名称中的“零日”意味着&#xff0c;从漏洞被发现到厂商发布修复补丁的时间是零天&#xff0c;也就是说&#xff0c;黑客可以利用这个漏洞进行攻击&#xff0c;而…

linux快速入门-VMware安装linux,配置静态ip,使用服务器连接工具连接,快照和克隆以及修改相关配置信息

安装VMWare 省略&#xff0c;自己检索 安装操作系统-linux 注意&#xff1a;需要修改的我会给出标题&#xff0c;不要修改的直接点击下一步就可以 选择自定义配置 选择稍后安装操作系统 选择合适的内存 选择NAT模式 仅主机模式 虚拟机只能和主机通信&#xff0c;不能上网…

Nest全栈到失业(一):Nest基础知识扫盲

Nest 是什么? 问你一个问题,node是不是把js拉出来浏览器环境运行了?当然,他使用了v8引擎加上自己的底层模块从而实现了,在外部编辑处理文件等;然后它使用很多方式来发送请求是吧,你知道的什么http.request 或 https.request; 我们浏览器中,使用AJAX以及封装AJAX和http的Axios…

Streamlit 项目知识点总结

目录 1. 单选框、下拉框格式化 2. 多媒体资源的引用 2.1 搭建一个简易的http服务器 2.2 约定多媒体资源的输入格式 2.3 解析多媒体资源 3. 设置页面的全局背景图片 4. 输出流式文本&#xff08;类似打字效果&#xff09; 4.1 使用内置的 st.write_stream 方法实现 4.2…

maven模块化开发

使用方法 将项目安装到本地仓库 mvn install 的作用 运行 mvn install 时&#xff0c;Maven 会执行项目的整个构建生命周期&#xff08;包括 compile、test、package 等阶段&#xff09;&#xff0c;最终将构建的 artifact 安装到本地仓库&#xff08;默认路径为 ~/.m2/repos…

(11)Service Mesh架构下Java应用实现零信任安全模型

Service Mesh架构下Java应用实现零信任安全模型 📌 TL;DR: 本文详细介绍如何在Service Mesh架构中实现零信任安全模型,包括身份认证、授权控制、加密通信和持续监控四大核心技术,以及与Istio、Envoy等组件的集成方案。 目录 零信任安全模型概述关键技术实现最佳实践Service…

修改 K8S Service 资源类型 NodePort 的端口范围

在 Kubernetes 中&#xff0c;Service 类型为 NodePort 时&#xff0c;默认分配的端口范围为 30000~32767。如果你希望使用自定义端口&#xff08;如 8080、8888 等&#xff09;&#xff0c;就需要修改 kube-apiserver 的默认配置。 本文将详细介绍如何修改 Kubernetes 中 Nod…

MySQL 可观测性最佳实践

MySQL 简介 MySQL 是一个广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;以其高性能、可靠性和易用性而闻名&#xff0c;适用于各种规模的应用&#xff0c;从小型网站到大型企业级系统。 监控 MySQL 指标是维护数据库健康、优化性能和确保数据…

CentOS安装最新Elasticsearch8支持向量数据库

大家都知道Elasticsearch是支持向量的存储和查询的&#xff0c;今天我们来介绍下如何安装支持向量数据库的Elasticsearch &#xff0c; 操作环境是CentOS。 成功安装截图 大家进入系统shell&#xff0c;跟我执行下面命令进行安装。 更新系统 [rootlocalhost ~]# sudo yum u…

SDL2常用函数SDL事件处理:SDL_Event|SDL_PollEvent

SDL_Event SDL_Event是个联合体&#xff0c;是SDL中所有事件处理的核心。 SDL_Event是SDL中使用的所有事件结构的并集。 只要知道了那个事件类型对应SDL_Event结构的那个成员&#xff0c;使用它是一个简单的事情。 下表罗列了所有SDL_Event的所有成员和对应类型。 Uint32typ…

webpack吐环境分析

需要解决的问题 扣取下来的webpack文件过大 解决思路 用ast将需要的代码扣下来 结果展示 实现步骤 第一步&#xff1a;我们得知道需要哪些模块 在入口处&#xff0c;增加模块记录 第二步&#xff0c;分析ast代码 通过分析发现,key 有三种值 分别为NumbericLiteral、StringLi…

微软语音合成助手资源下载

微软语音合成助手资源下载 【下载地址】微软语音合成助手资源下载 微软语音合成助手是一款基于先进AI技术的文本转语音工具&#xff0c;能够将文字内容快速转换为自然流畅的语音。它支持高度自定义的语音参数&#xff0c;包括语速、音调、发音和停顿等&#xff0c;满足多样化需…

青少年编程与数学 02-020 C#程序设计基础 01课题、C#编程概要

青少年编程与数学 02-020 C#程序设计基础 01课题、C#编程概要 一、微软.NET开发平台1. 核心组件2. 特点3. 应用场景4. 开源与社区5. 版本与更新6. 学习资源 二、C# 编程语言1. 历史背景2. 语言特性&#xff08;1&#xff09;面向对象&#xff08;2&#xff09;类型安全&#xf…