4-激活函数:给机器注入灵魂

news2024/11/16 20:37:31

声明

本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享,严禁他用!!如有侵权,请联系删除

目录

一、知识引入

(一)背景

(二)激活函数

(三)引入激活函数后

(四)梯度下降

1、复合函数求导--链式法则

2、引入激活函数后的代价函数e对w的导数

3、激活函数的意义

二、编程实验

(一)将sigmoid激活函数带入预测模型中

(二)复合函数的链式求导法则求出代价函数在w和b上的导数

 (三)梯度下降

(四)完整代码


一、知识引入

(一)背景

        人类在思考时,往往不会产生精确的数值估计或拟合,而更常做的事情是分类。eg:给定一个馒头,更倾向于将馒头分为“能吃饱”和“吃不饱”这两类,而不会在大脑中构建出一个精确的函数曲线。

        对于小蓝也是,更希望把豆豆分成“有毒”和“无毒”这两类。

        纵坐标不再表示毒性的大小,而表示有毒的概率,1表示有毒,0表示无毒。不存在中间值。是一个两级分类的分化问题。之前的预测函数y = wx + b变得不再适合。我们更希望可以在大于某个阈值时输出1,小于阈值时固定输出0

(二)激活函数

        可以利用一个分段函数实现这一点,把之前线性函数的结果,丢进一个分段函数中进行二次加工。这个新加入的分段函数就是--激活函数

        当然,这样的阶跃函数作为激活函数,并不十分美好。(导数处处为0,不利于梯度下降)

        更好、更常用的函数--Logistic函数。标准的Logistic函数【圆润并且取值在[0,1],导数处处不为0

        (Sigmoid函数指的是一切具有S形状的函数,Logistic函数属于其中的一种,也是最常用的一种。

        而Logistic我们一般也是使用他的标准形式,也就是取L=1,k=1,x0=0,这属于Logistic函数的一种特例。

        这就是它们的区别,不过鉴于很多时候大家默认都是用标准的Logistic函数,所以慢慢的人开始就不主动区分Logistic和Sigmoid叫法,甚至不区分标准Logistic函数和sigmoid函数。

        我们在机器学习中说的Sigmoid函数,一般也就指的是标准的Logistic函数。)

(三)引入激活函数后

        线性函数现在作为预测的第一部分,线性函数的输出并不是最终的预测结果。

        将线性函数的结果z,作为自变量,送入到激活函数中

        得到结果a,才是最后的预测结果

(四)梯度下降

1、复合函数求导--链式法则

最终:

每一层分别把上一侧的因变量输出,作为本层的自变量输入进行求导。最后通过乘法相连

2、引入激活函数后的代价函数e对w的导数

链式法则相乘:

3、激活函数的意义

 (1)线性函数能力有限,对于一个多层的神经网络,若每一个神经元都是一个线性函数,那么即使我们有很多的神经元构建出一个复杂神经网络,从数学的角度来说,他们在一起仍然是一个线性系统。线性函数无论怎么叠加,结果都是一个线性函数。

(2)激活函数是非线性的,让神经网络开始具备处理越来越复杂问题的能力。

二、编程实验

(一)将sigmoid激活函数带入预测模型中

w = 0.1
b = 0.1
z = w * xs + b
a = 1 / (1 + np.exp(-z))

(二)复合函数的链式求导法则求出代价函数在w和b上的导数

# 对w和b求偏导
z = w * x + b
a = 1 / (1 + np.exp(-z))
# 损失函数
e = (y - a)**2
# 直接引入数学公式
deda = -2 * (y - a)
dadz = a * (1 - a)
dzdw = x

dedw = deda * dadz * dzdw

dzdb = 1

dedb = deda * dadz * dzdb

 (三)梯度下降

# 梯度下降
# 对b和w进行求导,二者合在一起,才算完成一次梯度下降
w = w - alpha * dedw # 梯度下降调整权重w
b = b - alpha * dedb # 梯度下降调整截距b

(四)完整代码

import dataset
import matplotlib
import numpy as np
from matplotlib import pyplot as plt
# 首先要知道 matplotlib 的 backend 使用的是默认配置 agg (agg不能显示绘制的图),要想显示绘制的图需要更改 agg 为 TkAgg
matplotlib.use('TkAgg')

# 生成数据
xs, ys = dataset.get_beans(100)
num = 100

# 给定一个权重初始值
w = 0.1
b = 0.1
z = w * xs + b
# 使用sigmoid激活函数嘎变原始预测函数
a = 1 / (1 + np.exp(-z))

# 在全部样本上做了5000次梯度下降
for _ in range(5000):
    for i in range(100):
        x = xs[i]
        y = ys[i]

        # 对w和b求偏导
        z = w * x + b
        a = 1 / (1 + np.exp(-z))
        # 损失函数
        e = (y - a)**2
        # 直接引入数学公式
        deda = -2 * (y - a)
        dadz = a * (1 - a)
        dzdw = x

        dedw = deda * dadz * dzdw

        dzdb = 1

        dedb = deda * dadz * dzdb

        alpha = 0.05

        # 梯度下降
        # 对b和w进行求导,二者合在一起,才算完成一次梯度下降
        w = w - alpha * dedw # 梯度下降调整权重w
        b = b - alpha * dedb # 梯度下降调整截距b

    # 减少绘图的频率
    if _ % 50 == 0:
        # plt.clf()函数清除绘图窗口
        plt.clf()
        # 重新绘制散点图和预测曲线
        plt.scatter(xs, ys)
        z = w * xs + b
        a = 1 / (1 + np.exp(-z))

        plt.xlabel("Bean Size")  # 设置横坐标的名字
        plt.ylabel("Probability")  # 设置纵坐标的名字
        # x轴的范围从0到1
        plt.xlim(0, 1)
        # y轴的范围从0到1.2
        plt.ylim(0, 1.2)
        plt.plot(xs, a)
        # 暂停0.01秒
        plt.pause(0.01)

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

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

相关文章

vulhub中DNS域传送漏洞复现

DNS协议支持使用axfr类型的记录进行区域传送,用来解决主从同步的问题。如果管理员在配置DNS服务器的时候没有限制允许获取记录的来源,将会导致DNS域传送漏洞。 环境搭建 Vulhub使用Bind9来搭建dns服务器,但不代表只有Bind9支持AXFR记录。运行…

知识管理系统(KMS)和AI的融合十大场景

我向AI问了一个问题,KMS和AI融合有哪些场景,不得不说AI越来越强大了,他给我列出了十个场景,老铁们知道有哪些可以落地的吗? 将知识管理系统(KMS)与人工智能(AI)融合有着广…

ELK集群实战

1、 Elasticsearch集群部署 服务器 安装软件主机名IP地址系统版本配置ElasticsearchElk10.12.153.180centos7.5.18042核4GElasticsearchEs110.12.153.178centos7.5.18042核4GElasticsearchEs210.12.153.179centos7.5.18042核4G 2、创建运行的ES普通用户 3、上传es的数据包 …

代码随想录阅读笔记-哈希表【三数之和】

题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a b c 0 ?请你找出所有满足条件且不重复的三元组。 注意: 答案中不可以包含重复的三元组。 示例: 给定数…

spring注解驱动系列--AOP探究一

一、AOP--动态代理 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 二、使用栗子 一、导入aop模块 <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4…

数据在内存的存储

整数在内存中的存储 我们来回顾一下&#xff0c;整数在计算机是以补码的形式进行存储的&#xff0c;整数分为正整数和负整数&#xff0c;正整数的原码、反码和补码是一样的&#xff0c;负整数的原码、反码和补码略有不同&#xff08;反码是原码除符号位&#xff0c;其他位按位取…

注册-前端部分

前提:后端jar环境、Vue3环境、Redis环境 搭建页面(html标签、css样式) → 绑定数据与事件(表单校验) → 调用后台接口(接口文档、src/api/xx.js封装、页面函数中调用) Login.vue文件: <script setup> import { User, Lock } from "@element-plus/icons-…

【Axure高保真原型】多色知识图谱

今天和大家分享中继器版多色知识图谱的原型模板&#xff0c;鼠标拖动节点&#xff0c;对应节点会跟随鼠标移动&#xff0c;和相关节点对应的连接线也会自动调整&#xff1b;节点圆是多色的&#xff0c;案例中包括红、黄、浅蓝、深蓝、绿、青、紫、灰色&#xff0c;后续可以根据…

Java代码基础算法练习-数制转换-2024.03.18

任务描述&#xff1a; 输入一个 10 进制正整数n(取值范围:0<n<1000)&#xff0c;然后输出它所对应的八进制(要求用模除取余&#xff0c;不得直接转换输出) 任务要求&#xff1a; 十进制数转八进制数的思想&#xff1a; 十进制数转八进制数的思想主要基于“除基取余”法&…

kingbase 服务器配置(参数修改)

引言&#xff1a; 人大金仓作为国产数据库的佼佼者(单机)&#xff0c;也是每位数据库从业者必须数据库之一 配置文件 kingbase 参数配置 主要由 kingbase.conf 和 kingbase.auto.conf 设置 kingbase.conf 该参数文件为主配置文件&#xff0c;一般情况下&#xff0c;需要 重启…

HarmonyOS(鸿蒙)快速入门

一:下载开发工具 鸿蒙的开发工具叫DevEco 下载点击 其他部分都一直next 就行,这个页面出现的install 建议都点击install 然后单独选择安装目录 可能存在的问题 就是之前安装nodejs&#xff08;比如自己开发web或者RN等情况&#xff09;版本低 等情况 所以建议你单独安装一次 …

Linux chapter1 常用命令 cp

note 1 : netstat、curl、ip、nmap、dig 这些都是常用的网络诊断工具&#xff0c;它们的全称如下&#xff1a; netstat&#xff1a;Network Statistics&#xff0c;网络统计&#xff0c;用于显示网络连接&#xff0c;路由表&#xff0c;网络接口统计等网络信息。curl&#xf…

Springboot 博客_001 环境准备(VS code版本)

本人喜欢用vs coder&#xff08;免费又好用&#xff09;, 所以以下拿vs coder配置开发 安装JDK17 下载JDK17 https://www.oracle.com/java/technologies/downloads/#jdk17-windows 安装JDK17 标题双击运行&#xff0c;一路默认 删除原本的环境变量 配置环境变量 查看是否安…

PTA L2-018 多项式A除以B

这仍然是一道关于A/B的题&#xff0c;只不过A和B都换成了多项式。你需要计算两个多项式相除的商Q和余R&#xff0c;其中R的阶数必须小于B的阶数。 输入格式&#xff1a; 输入分两行&#xff0c;每行给出一个非零多项式&#xff0c;先给出A&#xff0c;再给出B。每行的格式如下…

了解抖音小程序与抖音小店的区别

首先&#xff0c;从功能和定位上来看&#xff0c;抖音小店是抖音官方推出的一种功能&#xff0c;专为商家提供在抖音平台上销售商品的工具。而抖音小程序则是一种无需下载即可使用的应用&#xff0c;类似于微信小程序&#xff0c;但主要在抖音、头条、极速版头条等平台上运行。…

逻辑回归LogisticRegression quickstart

本文将用可视化思路理解逻辑回归 数学背景 比如我们认定一个的值只可能在[0, 1], 那当小于0.5&#xff0c;我们认为他就是a&#xff0c;当大于0.5&#xff0c;我们认为他就是b 数据集 使用鸢尾花数据集 4个特征值3个类别 二分类&#xff0c;单维度 只使用一个特征X ir…

Linux docker3--数据卷-nginx配置示例

一、因为docker部署服务都是以最小的代价部署&#xff0c;所以通常在容器内部很多依赖和命令无法执行。进入容器修改配置的操作也比较麻烦。本例介绍的数据卷作用就是将容器内的配置和宿主机文件打通&#xff0c;之后修改宿主机的配置文件就相当于修改了docker进程的配置文件&a…

“灯塔”——一个让人爱不释手的前端监测工具

引言 "灯塔"&#xff08;fee&#xff09;作为一个前端监控系统&#xff0c;通常具备捕获浏览器端错误、性能监控、用户行为跟踪等功能。它的主要目的是帮助开发者了解他们的网站或应用在用户端的表现&#xff0c;以及时发现并解决问题。下面是关于这种系统的一些关键…

【web开发网页制作】Html+Css+js网页制作轮播效果个人网页主题(4页面附代码)

个人网页制作目录 涉及知识写在前面一、网页主题二、网页效果Page1、我的首页Page2、文经风采&#xff08;学校&#xff09;Page3、美图分享Page4、热剧推送视频效果 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码HtmlCss 作者寄语 涉及知识 轮播效…

9. 编程常见错误归类

编程常见错误归类 9.1 编译型错误9.2 链接型错误9.3 运行时错误 9.1 编译型错误 编译型错误⼀般都是语法错误&#xff0c;这类错误⼀般看错误信息就能找到⼀些蛛丝马迹的&#xff0c;双击错误信息也能初步的跳转到代码错误的地方或者附近。编译错误&#xff0c;随着语言的熟练…