当前位置: 首页 > 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…...

Cursorify:构建AI驱动的深度集成开发环境框架

1. 项目概述&#xff1a;从“智能代码补全”到“深度集成开发环境”的跨越最近在开发者社区里&#xff0c;一个名为“Cursorify”的项目引起了不小的讨论。乍一看这个标题&#xff0c;很多人的第一反应可能是“哦&#xff0c;又一个基于Cursor的插件或者工具”。但当你真正深入…...

基于LLM的代码仓库智能分析:RepoMap-AI实现架构可视化与认知图谱

1. 项目概述&#xff1a;当AI成为你的代码库“活地图”最近在折腾一个老旧的Java项目&#xff0c;里面模块套模块&#xff0c;依赖关系复杂得像一团乱麻。想找个特定的工具类&#xff0c;得在十几个包里翻来覆去地搜&#xff1b;想理清某个核心服务的调用链路&#xff0c;光靠I…...

别再死记硬背了!用SPSS搞定系统聚类法,手把手教你从数据录入到谱系图解读

SPSS系统聚类法实战&#xff1a;从数据导入到商业解读的全流程指南 当你的数学建模作业截止日期临近&#xff0c;或者老板突然要求对市场调研数据进行分类分析时&#xff0c;系统聚类法往往是救命稻草。但传统教材中复杂的距离矩阵计算和迭代过程&#xff0c;常让初学者望而生畏…...

Ubuntu系统部署Cursor AI编辑器:从安装配置到实战优化全指南

1. 项目概述&#xff1a;在Ubuntu上快速部署Cursor AI编辑器最近在开发者圈子里&#xff0c;Cursor这款AI驱动的代码编辑器热度持续攀升。作为一个深度依赖Ubuntu进行日常开发的程序员&#xff0c;我自然也第一时间尝试了在Ubuntu 22.04 LTS上安装和配置Cursor。整个过程比预想…...

40希尔排序 - 以递减间距进行插入排序

希尔排序 - 以递减间距进行插入排序 040希尔排序&#xff1a;用长距离跳跃打破速度壁垒&#x1f4f0; 5W1H 发明者故事 Who&#xff08;何人&#xff09;- 发明者是谁&#xff1f; 发明者&#xff1a;唐纳德希尔&#xff08;Donald L. Shell&#xff09; 背景&#xff1a;希尔…...

图像边缘检测算法全解析:从Sobel到Canny的实战指南

1. 项目概述&#xff1a;从“看见”到“看懂”的第一步在机器视觉的世界里&#xff0c;让计算机“看见”只是第一步&#xff0c;真正的挑战在于让它“看懂”。而“看懂”一幅图像&#xff0c;往往始于识别其轮廓与边界。这就是“边缘检测”的核心价值所在——它如同视觉系统的“…...

ARM RealView开发套件实战指南与优化技巧

1. ARM RealView开发套件概述作为一名从事嵌入式开发多年的工程师&#xff0c;我深知一套优秀的开发工具对项目效率的影响。ARM RealView开发套件&#xff08;RVDK&#xff09;是ARM公司推出的专业级嵌入式开发解决方案&#xff0c;专为基于ARM架构的处理器设计。这套工具链在我…...

吵翻了!龙虾之父晒天价账单,一个月烧了 130 万美元,消耗 6030 亿 Token

前段时间&#xff0c;昆仑万维董事长方汉的一次访谈引发热议&#xff0c;他自曝“一个月才用 20 多亿&#xff0c;有点惭愧。” 他有位 CTO 朋友每月烧 600 亿 token&#xff0c;3 个月完成百名程序员七八年写的 800 万行代码。不过呢&#xff0c;今天小程程刷到一个更绝的案例…...

解锁AI编程新体验:开源助手完整配置指南

解锁AI编程新体验&#xff1a;开源助手完整配置指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial request li…...

BiliTools终极指南:2026年最强大的免费哔哩哔哩下载工具

BiliTools终极指南&#xff1a;2026年最强大的免费哔哩哔哩下载工具 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …...