线性模型到神经网络

🚀 在初始神经网络那一节(链接如下:初始神经网络)的最后,我们通过加大考虑的天数使得我们最后得到的模型Loss最终停留在了0.32k,当我们在想让模型更加准确的时候,是做不到的,因为我们使用的是线性模型(liner model);接下去我们一起探索将如何进一步优化。
1)线性模型也许太过于简单
由于使用的函数都是线性的,所以我们不管怎么调节b和w,最后得到的都仅仅只是不同的线性模型,显然线性模型是不能满足要求的,因为通过2017-2020年数据可知,有些天数的观看人数并不是呈现一个简单的比例关系变化,所以线性模型也许太过于简单了。
 
模型过于简单从而导致准确率提不上来,这被称之为model bias ,所以需要一些跟加灵活的函数。就如下图所示的红色线所示,其变化趋势有的天数可能成正比,有的天数可能成反比,那我们该如何得到这种红色的函数呢?
 
其实,可以将红色的函数看成是constant + sum of blue curve,该如何理解怎么加的呢,如下图所示

- 0号线也就是constant
- 1号线拟合第一段
- 2号线拟合第二段
- 3号线拟合第三段
所以可以通过一系列的蓝色线相加来得到最后结果,即最后的红色curve,那又如何得到这些不同的蓝色线呢?这个问题后面讲到。 所以说按道理来说,对于任何一条线(piecewise liner curve)。我们都可以通过一系列的蓝色线条(blue curve)组合来得到,可是也许有人会说,那对于完全曲线类型的函数我们又该如何拟合呢?
只需要在这些曲线( beyond piecewise liner curve )上取点,通过两点的连线,也可以很好的拟合出来曲线。
 
2)如何去得到各种各样的蓝色线条

 对于上图的蓝色函数我们都可以通过下面的函数(sigomid函数)来进行拟合得到,只要改变不同的b和w的只值,我们就可以得到不同的蓝色函数线条。
 
具体看下不同的b和w如何影响蓝色线的形状:
- 不同的w,可以看出来改变的是其线条的坡度
- 不同的b,是将线进行的平移
- 不同的c,是改变了线条的范围大小

 所以各种各样的蓝色线可以通过sigmoid函数拟合得到,而只需要将函数写成多个蓝色函数和的形式就可以得到一个比较灵活的函数,而不会像liner model一样看上去那么的不可靠。
 
 在之前我们是使用前一天的直接预测下一天的线性模型进行预测,由于存在model bias ,所以现在改用跟加灵活的函数;
- 其中 x 1 x_1 x1是输入的特征,也就是前一天的观看量
- 其中 b i b_i bi c i c_i ci和 w i w_i wi都是未知参数,是改变sigmoid函数的参数
- 其中将i个sigmoid函数变换后的函数相加,因为我们也具体不知道对于拟合一个函数,需要几个蓝色函数相加合适
- 其中 b b b也是未知参数,用于调节整体的误差。

在这里我们再次将考虑前一天的变成考虑前三天的观看量,最开始使用线性模型是: y = b + ∑ j w j x j y=b+\sum\limits_{j}w_jx_j y=b+j∑wjxj,现在为了让这个线性模型变得更加灵活,将其加到sigmoid函数中去,就可以让最后拟合的结果变得十分灵活。
 
也许这样看这这个式子很抽象,我们可以一步一步来看看他是如何进行的,在进行之前我们还是需要重新回忆一下这个式子中的参数都是什么
- x j x_j xj是输入的特征,表示有j个特征被输入,也就是有前j天的观看数据被输入
- w i j w_{ij} wij为什是ij呢,其中i表示第i种蓝色曲线,即 w i j w_{ij} wij表示在第i种蓝色曲线下其这j种特征分别对应的权重值。
-  b i b_i bi和 w i j w_{ij} wij都是未知参数,其真实目的是调节sigmoid函数的形状
- b b b是整体函数的偏移量

 对于三个特征的输入,首先来计算第一条被拟合的蓝色curve ,因该是先写出其线性表达式,将其放入sigmoid函数中,其就会具有灵活性而拟合出来所需要的蓝色曲线,先来写出其线性函数,即如下: r 1 = b 1 + w 1 1 x 1 + w 1 2 x 2 + w 1 3 x 3 r_1=b_1+w_11x_1+w_12x_2+w_13x_3 r1=b1+w11x1+w12x2+w13x3再将这个这个线性函数放入sigmoid函数得到第一个蓝色curve1,同样依次可以得到蓝色curve2,蓝色curve3。
 
 也就是上图所说的 a 1 a 2 a 3 a_ 1a_2a_3 a1a2a3在分别乘上 c 1 c 2 c 3 c_ 1c_2c_3 c1c2c3在将这三条蓝色curve相加再加上 b b b就得到了最后的  y y y 。
其实上面的函数可以通过矩阵的方式如下表示出来 r = b + w x r=b+wx r=b+wx
 
 再将r放入sigmoid函数,也就得到了使用矩阵表示的函数,如下所示。
 
同样的,我们现在仅仅是将函数的表达式给写了写了出来,函数中的未知参数同样需要求解出来。
3)求解参数
求解参数这里依然采用梯度下降的方法,为了求偏导和表示方便,统一将参数写成一个矩阵  θ \theta θ。
 
 其梯度下降求解的过程一样,建立Loss函数,对其分别求偏导,梯度下降,就如下图所示,直到得到最优解。
 
4)batch和epoch
我们在计算Loss的时候,我们是尝试将所有已知的训练数据算一个损失,然后根据这个损失函数求偏导计算偏导值,然后根据偏导值,决定未知参数的更新方向;当开始使用batch和epoch的时候,不再计算整个训练数据集的损失,接着往下看他是怎么进行的。
对于一个完整的数据集,将其随机分成几个等大小的数据集简称一个batch,再计算Loss的时候,就只将一个batch中的损失求和,求偏导,更新参数;进行第二次参数更新的时候,就选择下一个batch,进行更新参数。每次使用一个batch更新一次参数称为一个updata。当看完所有batch的时候,称之为一个epoch。
 
5)神经网络和深度学习
在上面我们学习的过程中,其实我们已经创造了一个神经网络,其实1943年,心理学家Warren McCulloch和数理逻辑学家Walter Pitts在合作的《A logical calculus of the ideas immanent in nervous activity》论文中就给出了人工神经网络的概念及人工神经元的数学模型,从而开创了人工神经网络研究的时代。1949年,心理学家唐纳德·赫布在《The Organization of Behavior》论文中描述了神经元学习法则。所以神经网络并不是什么新鲜的事情,在1969年,人工智能之父 Minsky(和Seymour Papert)在《感知器》(Perceptrons)一书里给感知器判了“死刑”,这是一本非常严谨的专著,影响力很大。都得到一个简单的结论:神经网络都是骗人的。

神经网络网络这个名词在那个年代就好像一个臭明昭著的名词,谁也不感冒,所以为了发展它,取了另外一个名字,叫做深度学习(deep learing),即如下图所示,在结果输出的时候,在放一层神经元,使其深度变大。
 
 在之后,我们的网络深度越来越深,其效果也是越来越好,如下图所示
 
 所以我们也将我们的网络叠的深一点来看其表现,显然在网络在叠到三层的时候,表现非常好了,但是当网络叠到第四层的时候,其在训练集上的损失是0.1k,而在没有看过的数据上确表现的很差,这是由于层数太多导致了overfitting

随着网络深度的增加,会使得最后得到的结果更加准确,结果更加准确是函数拟合的更加贴切,深度增肌无非就是sigmoid的增加,那为什么非得在深度上拓展使之变得更深,而不是在宽度上拓展使其变的更宽呢?
相关文章:
 
线性模型到神经网络
🚀 在初始神经网络那一节(链接如下:初始神经网络)的最后,我们通过加大考虑的天数使得我们最后得到的模型Loss最终停留在了0.32k,当我们在想让模型更加准确的时候,是做不到的,因为我们…...
 
【架构】前台、中台、后台
文章目录 前台、中台、后台1. 前台(Frontend)特点:技术栈: 2. 中台(Middleware)特点:技术栈: 3. 后台(Backend)特点:技术栈: 示例场景…...
Stable Diffusion 蒙版:填充、原图、潜空间噪声(潜变量噪声)、潜空间数值零(潜变量数值零)
在Stable Diffusion中,蒙版是一个重要工具,它允许用户对图像的特定部分进行编辑或重绘。关于蒙版蒙住的内容处理选项,包括填充、原图、潜空间噪声(潜变量噪声)、浅空间数值零(潜变量数值零)&…...
ffmpeg录制视频功能
本文目录 1.环境配置2.ffmpeg编解码的主要逻辑:3. 捕获屏幕帧与写入输出文件4. 释放资源 在录制结束时,释放所有分配的资源。5.自定义I/O上下文6.对于ACC编码器注意事项 1.环境配置 下载并安装FFmpeg库 在Windows上 从FFmpeg官方网站下载预编译的FFmpeg…...
 
【LeetCode】每日一题 2024_10_1 最低票价(记忆化搜索/DP)
前言 每天和你一起刷 LeetCode 每日一题~ 大家国庆节快乐呀~ LeetCode 启动! 题目:最低票价 代码与解题思路 今天这道题是经典动态规划,我们定义 dfs(i) 表示从第 1 天到 第 i 天的最小花费,然后使用祖传的:从记忆…...
[C++] 小游戏 征伐 SLG DNF 0.0.1 版本 zty出品
目录 先赞后看 养成习惯 War and Expedition SLG DNF 0.0.1 version 讲人话就是 图标解释: 绿色代表空地,可通过,对应数值 0 蓝色“~ ”为水,不可通过,对应数值 1 棕色“”为桥梁,可通过࿰…...
 
黑马头条day7-app端文章搜索
今天的内容也只是跑了一下 对于具体的实现掌握的很差 仔细看 es 在微服务学的es使用基本忘光了 这里用起来一点都熟悉 重学!!! kafka异步 文章自动构建索引的时候用到了‘’ mongoDB 用来存储用户的搜索记录 遗忘(拦截器 j…...
嵌入式必懂微控制器选型:STM32、ESP32、AVR与PIC的比较分析
目录 1 微控制器基础概述 1.1 微控制器基本概念 1.2 工作原理及架构 1.3 STM32、ESP32、AVR和PIC简介 2 微控制器性能比较分析 2.1 性能比较 2.2 功耗比较 2.3 功耗分析 2.4 外设接口对比 3 应用场景与选择策略 3.1 物联网应用场景 3.2 工业控制场景 3.3 智能家居场…...
 
Python selenium库学习使用实操二
系列文章目录 Python selenium库学习使用实操 文章目录 系列文章目录前言一、模拟登录二、表单录入 前言 在上一篇文章中,我们完成Selenium环境的搭建,和简单的自动化。今天继续深入学习。今天的目标是完成模拟登录,和表单录入。 一、模拟登…...
 
基于Hive和Hadoop的电信流量分析系统
本项目是一个基于大数据技术的电信流量分析系统,旨在为用户提供全面的通信数据和深入的流量使用分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 Spark…...
访问docker容器中服务的接口,报错提示net::ERR_CONNECTION_REFUSED
背景 使用httpclient和前端调用docker容器中部署的springboot服务接口,一直连接不上。 报错信息 AxiosError {message: Network Error, name: AxiosError, code: ERR_NETWORK, config: {…}, request: XMLHttpRequest, …} sys.ts:28 POST http://172.33.28.179:8181/sy…...
【mysql相关总结】
mysql相关总结 数据库小的表,全表扫描效率更高,不用建索引。 索引的类型 1.普通索引:基本的索引,没有任何约束限制 2.唯一索引:类似普通索引,有唯一约束性 3.主键索引:特殊的唯一索引,不允许有空值 4.组合索引…...
 
uniapp 微信小程序 微信支付
本章的内容我尽量描述的细致一些,哪里看不懂给我评论就可以,我看到进行回复 微信支付大致分为4步,具体看后端设计 1. 获取code 2. 根据code获取openid 3. 根据openid,以及部分订单相关数据,生成prepayId (预支付交易会…...
 
CSS 效果:实现动态展示双箭头
最近写了一段 CSS 样式,虽然不难,但实现过程比较繁琐。这个效果结合了两个箭头,一个突出,一个内缩,非常适合用于步骤导航或选项卡切换等场景。样式不仅仅是静态的,还可以通过点击 click 或者 hover 事件&am…...
Linux 创建开发用的账户
在Linux系统中,创建一个用于开发的用户账户通常涉及到添加用户、设置密码以及配置适当的权限和环境。这里将详细介绍如何在Linux系统中创建一个新的开发用户账户,包括为其配置sudo权限,使其能够执行需要管理员权限的命令。 步骤 1: 创建用户…...
 
检查一个CentOS服务器的配置的常用命令
在CentOS系统中,查看服务器配置的常用命令非常丰富,这些命令可以帮助用户快速了解服务器的硬件信息、系统状态以及网络配置等。以下是一些常用的命令及其简要说明: 1. 查看CPU信息 (1) cat /proc/cpuinfo:显示CPU的详细信息&…...
 
Redis 简单的消息队列
使用redis 进行简单的队列很容易,不需要使用较为复杂的MQ队列,直接使用redis 进行,不过唯一不足的需要自己构造生产者消费者,这里使用while True的方法进行消费者操作 目录 介绍数据类型StringHash 重要命令消息队列 介绍 key-v…...
 
C++:继承和多态,自定义封装栈,队列
1.栈: stack.cpp #include "stack.h"Stack::Stack():top(nullptr),len(0){} //析构函数 Stack::~Stack() {while(!empty()){pop();} }bool Stack::empty() //判断栈是否为空 {return topnullptr; }int Stack::size()//获取栈的大小 {return len; } //压…...
Python多个set中的交集
Python多个set中的交集 在 Python 中,集合(set)是一种非常有用的数据结构,它可以存储唯一的元素,并提供了高效的数学集合操作,包括求交集、并集和差集等。本文将重点介绍如何通过多重集合求交集࿰…...
 
百度百科 X-Bk-Token 算法还原
声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除! 文章目录 声明案例地址参数分析X-Bk-Token算法追踪X-Bk-Token后缀算法还原c 值跟踪与算法还原往期逆向文章推荐最近太忙了,博客摆烂了好…...
 
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
 
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
 
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
 
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
 
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
 
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
 
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
 
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
 
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
