【人工智能原理自学】激活函数:给机器注入灵魂

news2024/11/19 16:31:09

😊你好,我是小航,一个正在变秃、变强的文艺倾年。
🔔笔记来自B站UP主Ele实验室的《小白也能听懂的人工智能原理》。
🔔本文讲解激活函数:给机器注入灵魂,一起卷起来叭!

目录

  • 一、“分类”
  • 二、代码实现

一、“分类”

人在思考的过程中,往往不会产生精确的数值估计,而常做的事情是分类
在这里插入图片描述
比如给你一块馒头,你会说这么大的我能吃饱,这么大的我吃不饱,我们更倾向于把馒头分为“吃饱”“吃不饱”这两类:
在这里插入图片描述
而不会在大脑中构建出一条精确的函数曲线:
在这里插入图片描述
对于一个事物,简单的贴标签比仔细的计算更符合我们的生物本能:

在这里插入图片描述
也就是说:
在这里插入图片描述
同样对于小蓝,也是如此,假如小蓝抗毒能力为0.8:

在这里插入图片描述
那么怎么表示这样的关系呢?机制如你,想到分段函数
在这里插入图片描述
远的不说,这个大括号看着就很头疼,看着就是个不好处理的家伙。

我们接下来,看一种更为优雅的Logistic函数

在这里插入图片描述
不过我们一般会采用标准的Logistic函数,L=1,k=1,y0=0
在这里插入图片描述
可以看出来这个函数的计算结果始终在0到1之间,他的名字也暗示了这一点:很适合做逻辑判断,即分类。

知识补充:
在这里插入图片描述

此时这里函数关系为:
在这里插入图片描述
我们梳理一下这三个函数:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

接下来,我们按照之前的方法,分别e对w、b求偏导,然后合成:

在这里插入图片描述
补充Logistic函数的求导:
在这里插入图片描述


理解复合函数求导中从外到内的这一过程,这有助于我们后续理解神经网络的精髓:

在这里插入图片描述
深度学习的开山鼻祖,他们在1986年引入的反向传播算法成为了现代神经网络的基石:

在这里插入图片描述
反向传播算法发明在1961年,不过在此之前人们对多层感知器、深度神经网络都持悲观的态度:
在这里插入图片描述
他们曾这样说:
在这里插入图片描述
正如一位大佬所说:“很多看似显而易见的想法,只有在事后,才变得显而易见。
在这里插入图片描述

二、代码实现

豆豆数据集模拟:dataset.py

import numpy as np

def get_beans(counts):
	xs = np.random.rand(counts)
	xs = np.sort(xs)
	ys = np.zeros(counts)
	for i in range(counts):
		x = xs[i]
		yi = 0.7*x+(0.5-np.random.rand())/50+0.5
		if yi > 0.8:
			ys[i] = 1
	return xs,ys

豆豆毒性分布如下:

在这里插入图片描述
加入激活函数后的梯度随机下降算法:activation.py

import dataset
import matplotlib.pyplot as plt
import numpy as np

# 豆豆数量m
m = 100
xs, ys = dataset.get_beans(m)

# 配置图像
plt.title("Size-Toxicity Function", fontsize=12)
plt.xlabel("Bean Size")
plt.ylabel("Toxicity")
plt.scatter(xs, ys)

w = 0.1
b = 0.1
z = w * xs + b
a = 1 / (1 + np.exp(-z)) # 加入激活函数
plt.plot(xs, a)
plt.show()

# alpha为学习率
alpha = 0.01
# 训练5000次
for _ in range(5000):
    for i in range(100):
        x = xs[i]
        y = ys[i]
        # 三个函数
        z = w * x + b
        a = 1 / (1 + np.exp(-z))
        e = (y - a) ** 2
        # 对w和b求偏导
        deda = -2 * (y - a)
        dadz = a * (1 - a)
        dzdw = x
        dzdb = 1

        dedw = deda * dadz * dzdw
        dedb = deda * dadz * dzdb

        w = w - alpha * dedw
        b = b - alpha * dedb

    if _ % 100 == 0:
        # 绘制动态
        plt.clf()  ## 清空窗口
        plt.scatter(xs, ys)
        z = w * xs + b
        a = 1 / (1 + np.exp(-z))  # 加入激活函数
        plt.xlim(0, 1)
        plt.ylim(0, 1.2)
        plt.plot(xs, a)
        plt.pause(0.01)  # 暂停0.01秒

在这里插入图片描述

相关代码仓库链接,欢迎Star:传送门

在这里插入图片描述

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

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

相关文章

已解决pandas正确创建DataFrame对象的四种方法(通过list列表、dict字典、ndarray、Series对象创建)

已解决(pandas创建DataFrame对象失败)ValueError: 4 columns passed, passed data had 2 columns 文章目录报错代码报错翻译报错原因解决方法创建DataFrame对象的四种方法1. list列表构建DataFrame2. dict字典构建DataFrame3. ndarray创建DataFrame4. Se…

【MySQL】十一,存储引擎

查看存储引擎 查看mysql提供什么存储引擎 设置系统默认的存储引擎 查看默认的存储引擎 show variables like %storage_engine%; SELECT default_storage_engine;修改默认的存储引擎 如果在创建表的语句中没有显式指定表的存储引擎的话,那就会默认使用 InnoDB 作…

08、ThingsBoard使用msa构建镜像并上传到Harbor

1、概述 今天讲解如何使用thingsboard源码中的msa模块来构建镜像,首先我先说一下这个模块的作用,很多人都不明白msa是如何构建镜像的,msa下面创建了很多模块,每个模块都是一个应用,就像我们平时微服务一样可以独自启动,thingsboard是使用这些模块去其它模块拉取代码过来…

卷积神经网络 Convolutional Neural Network (CNN)

CNNObservation 1Observation 2Benefit of Convolutional LayerMultiple Convolutional LayersComparision of Two StoriesObservation 3Convolutional Layers PoolingApplication: Playing GoTo learn more ...仅供个人学习,不具参考价值! Image Class…

python代码运行速度有点慢 ? 教你使用多线程速度飞升

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 在我们爬取数据的时候,有时候它运行速度会非常慢 那么怎么解决呢? 这里给大家带来一个多线程的方法 我们用采集二手车来举例 环境使用: Python 3.8 Pycharm 模块使用: requests 数据请求模…

JVM类加载机制-让你明明白白的了解类的执行流程

一、类加载运行过程1.1 类加载到jvm的流程当我们使用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到jvm里。1.2 loadClass的类加载过程其中loadClass的类加载过程有如下几步:加载 >> 验证 >> 准备 >> 解析…

关于Visual Studio C++项目属性设置的说明

链接器—常规—输出文件 这里的输出文件指的是最终生成的exe文件 C/C–常规—附加包含目录 这里指的是需要include的一些头文件所在的 目录,可以提前在项目文件中建立好include文件,然后在这里设置,以后将一些自定义的include头文件放在这个…

Python之父强烈推荐,爬虫入门经典《python3网络爬虫开发实战》

实操性很强的一本工具书,由浅入深,深入浅出。前面从环境配置到爬虫原理、基本库和解析库的使用再到数据存储,一步步把基础打好,然后再分门别类介绍了Ajax、动态页、验证码、App的爬取、识别等,还讲解了代理使用、模拟登…

【Java】Spring中Aware接口的作用

Spring的几个aware接口的用法 ApplicationContextAware public interface ApplicationContextAware extends Aware {void setApplicationContext(ApplicationContext applicationContext) throws BeansException; }该接口仅有一个方法,用于设置Spring容器上下文。…

浅谈Springboot自动配置

目录 1.自动配置原理 2.自动配置案例 3.总结 1.自动配置原理 在一个Springboot程序中,我们只需要在main程序中使用springBootApplication注解即可标记为一个一个Springboot程序,然后使用 SpringApplication.run(TestMain.class,args) 代码即可创建…

多把锁,死锁,活锁,饥饿

目录 多把锁 多把锁的优缺点 活跃性 死锁 手写死锁 死锁的四个必要条件 定位死锁 jconsole运行命令 jps 定位进程 id,再用 jstack 定位死锁 死锁的三种场景 一个线程一把锁 两个线程两把锁 多个线程多把锁 解决死锁 活锁 饥饿 多把锁 现在有一个场…

Kali Linux ping扫描命令

1.命令介绍 kali的ping命令和centos linux的评命令许多参数都差不多,可以看一下我之前写的linuxping命令https://blog.csdn.net/qq_44652591/article/details/128439494 ping扫描是ping整个网络IP地址或单个IP,以查明它们是否活跃和响应的过程。ping也是…

用Kettle调用Restful API 接口

1 概述 kettle 中文名称叫水壶,是纯 java 开发,开源的 ETL工具,用于数据库间的数据迁移 。可以在 Linux、windows、unix 中运行。有图形界面,也有命令脚本还可以二次开发。当然它也可以用来调用Restful API 来采集数据&#xff0c…

【安全硬件】Chap.6 IC和半导体产业的全球化;芯片生产猜疑链与SoC设计流程;可能会存在的安全威胁: 硬件木马、IP盗版、逆向工程、侧信道攻击、伪造

【安全硬件】Chap.6 IC和半导体产业的全球化;芯片生产猜疑链与SoC设计流程;可能会存在的安全威胁: 硬件木马、IP盗版、逆向工程、侧信道攻击、伪造背景1. IC和半导体产业的全球化2. 芯片生产猜疑链——Untrusted IC Supply Chain Threats可能会存在的安全…

我只是把握好了这3点,1个月后成功拿下大厂offer!

目录 一、写在前面二、技术广度的快速准备三、技术深度的快速准备四、基础功底的快速准备五、下篇预告 一、写在前面 春节过后,即将迎来的是一年一度的金三银四跳槽季。 假如你准备在金三银四跳槽的话,那么作为一个Java工程师,应该如何利…

【Shell】mksh运行分析

mksh运行分析 Shell shell,壳子,即操作系统的壳子。这层壳子套在操作系统上,为用户提供与操作系统的交互手段。 操作系统的交互方式一般有,图形化交互(GUI)和命令行交付(CLI,command-line interface)。 套在操作系统上的壳子 …

虚拟机栈

虚拟机栈简介虚拟机栈的出现背景内存中的栈与堆虚拟机栈基本内容虚拟机栈的特点虚拟机栈的异常设置栈内存大小栈的存储单位栈中存储什么?栈运行原理栈帧的内部结构局部变量表认识局部变量表关于Slot的理解Slot代码示例Slot的重复利用静态变量与局部变量的对比补充说…

oracle安装教程

1安装和创建用户 1.1.安装以及常见问题 oracle安装教程 安装中 system密码改成root oracle卸载,除此之外清除C:\Program Files内的oracle 需要准备oracle安装包和plsql界面化操作工具 重装报错bug: plsql操作 plsql注册码 product code: ke4tv8t5jtxz…

java动态代理-面向切面代码样例

1.测试入口import java.lang.reflect.Proxy;/*** 面向切面测试* author epsoft-hy**/ public class test {public static void main(String[] args) {Class<?>[] cls {UserDao.class};//接口一个String classpath"util.aop.UserDaoImp";//访问类路径test2(tes…

【学vue跟玩一样】快速学会常用指令及如何理解生命周期

一&#xff0c;内置指令1.v-textv-bind:&#xff0c;单向绑定解析表达式v-model :双向数据绑定v-for:遍历数组/对象/字符串v-on :绑定事件监听,可简写为v-if :条件渲染(动态控制节点是否存存在)v-else :条件渲染(动态控制节点是否存存在)v-show:条件渲染(动态控制节点是否展示)…