当前位置: 首页 > news >正文

神经网络理论(机器学习)

motivation

如果逻辑回归的特征有很多,会造出现一些列问题,比如:

  1. 线性假设的限制: 逻辑回归是基于线性假设的分类模型,即认为特征与输出之间的关系是线性的。如果特征非常多或者特征与输出之间的关系是非线性的,逻辑回归可能无法很好地进行分类。

  2. 特征间相关性: 如果特征之间高度相关,逻辑回归可能会受到多重共线性的影响,导致参数估计不稳定或难以解释。

  3. 非线性决策边界的需求: 在复杂的分类问题中,数据可能需要非线性的决策边界来更好地进行分类。

相比之下,神经网络有一系列的优势:

  1. 非线性关系建模: 神经网络能够学习复杂的非线性关系,因此在特征与输出之间存在非线性关系或需要复杂的决策边界时,神经网络通常能提供更好的性能。

  2. 自动特征学习: 神经网络能够通过隐藏层自动学习特征的高级表示,无需手动进行特征工程,这对于大量特征的问题尤为有利。

  3. 适应性强: 神经网络通常对数据中的噪声和复杂性具有一定的鲁棒性,能够更好地泛化到新的数据集。

简单人工神经网络

那么简单介绍一下神将网络:

上面是一个简单人工神经网络,x1-->x3是输入的特征,每个特征都会乘上相应的参数最后得到一个值。(这样看起来和线性回归差不多)

复杂神经网络(旧版本)

接下来介绍一个稍微复杂一点的:

首先定义一些术语:

a^{(i)}_{j}第i层,第j个神经元的激活项
\Theta ^{(j)}从j层到j+1层的权重矩阵(注意,行从1开始,列从0开始)
激活项由一个神经元接受并输出的值

注意:

a^{(2)}_{1}=g(\Theta^{(1)}_{10}x_{0} + \Theta^{(1)}_{11}x_{1} + \Theta^{(1)}_{12}x_{2} + \Theta^{(1)}_{13}x_{3})\\

a^{(2)}_{2}=g(\Theta^{(1)}_{10}x_{0} + \Theta^{(1)}_{11}x_{1} + \Theta^{(1)}_{12}x_{2} + \Theta^{(1)}_{13}x_{3})\\

a^{(3)}_{2}=g(\Theta^{(1)}_{10}x_{0} + \Theta^{(1)}_{11}x_{1} + \Theta^{(1)}_{12}x_{2} + \Theta^{(1)}_{13}x_{3})\\

h_{\Theta}(x)=a^{(3)}_{1}=g(\Theta^{(2)}_{10}a^{(2)}_{0} + \Theta^{(3)}_{11}a^{(2)}_{1} + \Theta^{(3)}_{12}a^{(2)}_{2} + \Theta^{(3)}_{13}a^{(2)}_{3})\\

其中g是激活函数。

这里可能不容易理解:

其实\Theta是一个矩阵:

\begin{pmatrix} \theta_{10}&\theta_{11} &\theta_{12} &\theta_{13} \\ \theta_{20}&\theta_{21} &\theta_{22} &\theta_{23} \\ \theta_{30}&\theta_{31} &\theta_{32} &\theta_{33} \end{pmatrix}

上图其实还有一个隐藏的x_{0}没有画出。就像第一个图一样,这个x_{0}是用来调节参数的。

\theta_{ij}在上图中表示:第二层的第i个神经元接受第一层的第j个特征值,形成的参数(权重)。权重乘上相应的数值得到的值(这个神经元接受前面的所有的神经元传递给他的值的和)(如上a^{(2)}_{1}是由前面x0,x1,x2,x3传递给第二层第一个神经元得到\theta_{10}x_{0}+\theta_{11}x_{1}+\theta_{12}x_{2}+\theta_{13}x_{3},再通过激活函数g映射得到数值。)

得到结论:

一个神经网络的第j层有s_{j}个单元,第(j+1)层有s_{j+1}个单元,那么从j到(j+1)层的权重矩阵属于\mathbb{R}^{s_{j+1}\times (s_{j}+1)}。即形状为s_{j}\times(s_{j}+1)

复杂神经网络(新版本)

我们再来看一下另一种解释(其实本质差不多,只不过最新的术语有些改变)

\vec{a}^{[i]}第i层输入出向量
w这个神经元的权重

这里面x就是一个特征向量矩阵,叫做0层(layer0),与上面一个版本有所不同,上面一个版本吧输入的x叫做layer1。这里面,我们把每一个圆形叫做一个“神经元”,每个神经元都有两个参数,分别是向量\vec{w}和参数b。这个向量\vec{w}的维度与其前一层神经元的个数有关,如果前一层神经元有n个那么这个向量\vec{w}就是n维,因为这样才可以出现下面图展示的:

这里可以简化为:

a^{[i]}_{1}=g(\vec{w^{[i]}_{(1)}}\cdot \vec{a}^{[i-1]}+b^{[i]}_{1})

注意:每一层的g函数是一样的,不同层的g函数可以不一样。为了统一,我们经常把输入层(layer0)叫做\vec{a}^{[0]}\vec{x}=\vec{a}^{[0]}

向前传播(预测)

接下来看一下如何前向传播(通俗点讲叫预测,注意不包含训练)

我们将预测图像显示的是1 or 0。

下面的一个图像是灰度像素展示,是一个1。

我们按照行,把每行首尾相连,组合成一个8*8=64维的向量,把它作为x(输入层,\vec{a}^{[0]})。

然后我们搭建我们的神经网络:

计算过程:

向前传播在python中实现:

已知有上面的神经网络。

\vec{w}_{1}^{[1]}=\begin{bmatrix} 1\\2 \end{bmatrix}   \vec{w}_{2}^{[1]}=\begin{bmatrix} -3\\4 \end{bmatrix}  \vec{w}_{3}^{[1]}=\begin{bmatrix} 5\\6 \end{bmatrix}

将这几个权重整合在一起:

w = np.array([[1, -3, 5],[2, 4, -6]
])

注意,是两行三列,

b_{1}^{[l]}=-1 ,b_{2}^{[l]}=1 ,b_{3}^{[l]}=2

b = np.array([-1, 1, 2])

\vec{a}^{[0]}=\vec{x}

a_in = np.array([-2, 4])

接下来要创建一个函数用来搭建每一层网络。

def dense(a_in, W, b, g):units = W.shape[1]  # 计算这一层有多少个单元a_out = np.zeros(units)  # 初始化输出for i in range(units):w = W[:, i]  # 取出W的第j列,也就是第j个单元的w向量,注意这里取出的w是1D向量z = np.dot(w, a_in) + b[i]  # 这里的a_in也是1D向量a_out[i]=g(z)   #g为激活函数return a_out

虽然已经有了网络,但是如何将已经有的网络连接起来呢?

还要建立一个函数:

def sequential(x):a1 = dense(x, W1, b1, g)a2 = dense(a1, W2, b2, g)a3 = dense(a2, W3, b3, g)a4 = dense(a3, W4, b4, g)f_x = a4return f_x

代码的高效实现

W = np.array([[1, -3, 5],[2, 4, -6]
])              #不变
B = np.array([[-1, 1, 2]])   #变成二维
X = np.array([[-2, 4]])      #变成二维def dense(A_in, W, B):Z = np.matmul(A_in, W) + B   #这个方法不支持标量A_out = g(Z)return A_out

训练网络

对于下面网络:

我们调用tensorflow库,实现下面代码:

import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
model = Sequential([Dense(units=25,activation='sigmoid')Dense(units=15,activation='sigmoid')Dense(units=1,activation='sigmoid')]
)
from tensorflow.keras.losses import BinaryCrossentropy
model.compile(loss=BinaryCrossentropy)
model.fit(X,Y,epochs=100)

注意,这里的tensorflow由于版本问题,可能不含keras,可以直接下载keras这个包。(自己搞了半天才研究出来,大哭)

注意上面的步骤:

  1. model = Sequential(..)
  2. model.compile(loss=...)
  3. model.fit(X,y,epochs=100)

相关文章:

神经网络理论(机器学习)

motivation 如果逻辑回归的特征有很多,会造出现一些列问题,比如: 线性假设的限制: 逻辑回归是基于线性假设的分类模型,即认为特征与输出之间的关系是线性的。如果特征非常多或者特征与输出之间的关系是非线性的&#…...

JNI回调用中不同线程的env无法找到正确的kotlin的class

不同线程都需要通过 JavaVM 获取到的 JNIEnv 指针, 如果有两个线程有两个 env。 其中一个是jni接口自己传过来的,可以正常使用,正常获取kotlin中的class。但是通过 JavaVM 新获取的env 无法找到kotlin的class 1. 确保线程已附加到 JVM 确保…...

免费HTML模板网站汇总

PS:基本上都是可以免费下载使用的,而且有一些是说明了可以用于商用和个人的。部分网站可能需要科学上网才能访问,如无法访问可留言或私信。 1、https://www.tooplate.com/free-templates 2、https://htmlrev.com/ 3、https://html5up.net/ 4、…...

大屏数据看板一般是用什么技术实现的?

我们看到过很多企业都会使用数据看板,那么大屏看板的真正意义是什么呢?难道只是为了好看?答案当然不仅仅是。 大屏看板不仅可以提升公司形象,还可以提升企业的管理层次。对于客户,体现公司实力和品牌形象,…...

在 Kubernetes 中设置 Pod 优先级及其调度策略详解

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…...

Spring框架、02SpringAOP

SpringAOP 日志功能 基本方法 分析代码问题 目前代码存在两个问题 代码耦合性高:业务代码和日志代码耦合在了一起 代码复用性低:日志代码在每个方法都要书写一遍 问题解决方案 使用动态代理,将公共代码抽取出来 JDK动态代理 使用JDK动…...

基于python的网络爬虫爬取天气数据及可视化分析

要创建一个基于Python的网络爬虫来爬取天气数据并进行可视化分析,我们可以采用以下几个步骤来实现: 1. 选择数据源 首先,需要确定一个可靠的天气数据源。常用的有OpenWeatherMap、Weather API、Weatherstack等。这些API通常需要注册并获取一个API密钥(API Key)来使用。 …...

【WPF开发】上位机开发-串口收发

一、引言 在现代工业控制、嵌入式系统等领域,串口通信作为一种常见的通信方式,被广泛应用于各种场景。C#作为一门强大的编程语言,结合Windows Presentation Foundation(WPF)框架,可以轻松实现串口通信功能…...

ubuntu开启 远程登录 允许root远程登录

如果没有22端口服务 sudo apt update sudo apt install openssh-server sudo ufw allow.ssh sudo passwd root 修改配置文件 sudo vim /etc/ssh/sshd_config Port 22 修改为 Port 22 #PermitRootLogin prohibit-password 修改为 PermitRootLogin yes service ssh restart …...

《昇思25天学习打卡营第23天|RNN实现情感分类》

使用RNN进行情感分类:基于IMDB数据集的LSTM应用 引言 情感分析是自然语言处理(NLP)中的一个重要应用,广泛用于电影评论、社交媒体等文本数据的情感分类任务。本文将介绍如何使用递归神经网络(RNN)实现情感…...

机械设计基础B(学习笔记)

绪论 机构:是一些具备各自特点的和具有确定的相对运动的基本组合的统称。 组成机构的各个相对运动部分称为构件。构件作为运动单元,它可以是单一的整体,也可以是由几个最基本的事物(通常称为零件)组成的刚性结构。 构件…...

MybatisPlusException: Error: Method queryTotal execution error of sql 的报错解决

项目场景: 相关背景: 开发环境 开发系统时 系统页面加载正常 ,发布运行环境后运行一段时间,前端页面 突然出现 报错信息, 报错信息如下: MybatisPlusException: Error: Method queryTotal execution erro…...

人工智能领域的顶尖影响力人物(部分代表)

人工智能(AI)是模拟人类智能过程的计算机系统或机器的理论和开发。它致力于创建能够执行需要人类智能的任务的机器,如视觉感知、语音识别、决策制定和翻译之间的语言。AI领域包括机器学习、深度学习、自然语言处理等子领域,并涉及…...

Python:jsonl文件转json文件,并做字段处理

在使用LLaMA-Factory对shenzhi-wang/Llama3-8B-Chinese-Chat(https://huggingface.co/shenzhi-wang/Llama3-8B-Chinese-Chat/tree/main)进行微调时,希望使用COIG-CQIA的小红书数据集(https://huggingface.co/datasets/m-a-p/COIG-…...

安全产品在防御勒索病毒中的作用

在数字时代,网络安全威胁日益严峻,其中勒索病毒尤为猖獗,它通过加密受害者的数据并要求赎金换取解密密钥,给个人和企业带来了巨大的经济损失。然而,关于安全产品是否真正有效的问题一直存在争议。本文将通过一个模拟实…...

NVIDIA 完全过渡到开源 GPU 内核模块

目录 支持的 GPU安装程序更改将包管理器与 CUDA 元包配合使用使用 runfile使用安装帮助程序脚本包管理器详细信息apt:基于 Ubuntu 和 Debian 的发行版dnf:Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linuxzypper:SUSE …...

learning-cxx 学习cpp 环境配置 + bug解决

学习CPP网址 https://github.com/LearningInfiniTensor/learning-cxx 安装环境 1.配置xmake的环境 xmake是c的构建工具 最简单的配置方法就是安装mcvs,然后选择必要的那两个包 查看版本,是否安装成功 gcc --version g --version2.安装xmake 我的是…...

PHP 多线程和异步编程的常见陷阱

本文由 ChatMoney团队出品 在PHP开发中,多线程和异步编程是提高应用性能和响应速度的重要手段。然而,这些技术也带来了许多挑战和陷阱,如共享状态冲突、死锁、超时、资源泄漏以及调试困难等。本文将详细探讨这些陷阱,并提供相应的…...

STL 哈希 学习总结

概述 基础概念 哈希是通过特定的算法,将任意长度的数据映射为固定长度的数据串中。该映射的结果就被称为哈希值,也可以称为散列值。 例如在存储一个10000这个数据的时候,如果使用数组的话,则需要开辟对应大小空间内存&#xff…...

vue3页面编写-导入导出excel、展开查询项等

数据保持 <router-view v-slot"{ Component, route }"><keep-alive><component :is"Component" :key"route.name" v-if"route.meta.keepAlive" /></keep-alive><component :is"Component" :key…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

2025-05-08-deepseek本地化部署

title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek&#xff1a;小白也能轻松搞定&#xff01; 如何给本地部署的 DeepSeek 投喂数据&#xff0c;让他更懂你 [实验目的]&#xff1a;理解系统架构与原…...