学习笔记-李沐动手学深度学习(四)(12-13,权重衰退、L2正则化、Dropout)

2024-01-26 14:20

本文主要是介绍学习笔记-李沐动手学深度学习(四)(12-13,权重衰退、L2正则化、Dropout),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

总结

【trick】过拟合及正则化项参数的理解

实际数据都有噪音,一般有噪音后,模型实际学习到的权重w就会比 理论上w的最优解(即没有噪音时)大。(QA中讲的)

【好问题】
(1)不使用正则化(真正学习到的w=13 理论上的w=0.01,相差的还是很大)
(2)正则化权重lambd=3:明显已经 减轻了过拟合的程度(但学到的w是0.3 还是比 实际的w=0.01偏大的多)

因为 实际上数据中有很多噪音,模型 在学习时也会受他们的干扰,尝试去拟合噪音
实际的学习中是无法学习到理论上的最优解的(而且大概率实际学到的权重w很大),因为 实际数据中有噪音,如果一点噪音没有,那么可能就不需要lambda了,因为你不会过拟合到一些奇怪的地方了

正则化与模型设计(模型复杂度)

可以将模型设计的复杂一点(如隐藏层多、每个隐藏层节点数多)+正则化来控制模型复杂度(如使用dropout并将其调大),
这样的效果会 好于 使用简单的模型+不用dropout的方式

12-权重衰退(weight decay,L2正则化)

【解决过拟合、实际效果不太大】
L2正则化也叫权重衰退、岭回归、Tikhonov正则,不同学术圈称呼不一样——《花书》

正则化项权重λ是控制模型复杂度的超参数
在这里插入图片描述

正则

通过正则的方式,可以使你的模型权重取值范围不会太大,以避免一定的过拟合

概述

L2范数

【L2范数】||w|| 或 ||w||2 。注:省略右下角角标2是指 L2范数是默认的范数。即 一般说范数,就指L2范数
在这里插入图片描述
【各种范数参考链接】https://blog.csdn.net/weixin_58045467/article/details/131091687

本节用的是L2范数的平方
在这里插入图片描述

【引言理解】基于均方范数(L2)作为硬性限制

① 权重衰退是常见的处理过拟合的一种方法。
② 把模型容量控制比较小有两种方法,方法一:模型控制的比较小,使得模型中参数比较少。方法二:控制参数选择范围来控制参数容量。

③ 【基于θ控制w的范围】如下图所示,l为损失,在最小化损失时 加入一个限制,即w向量中每一个元素的平方和小于一个特定值θ(即w向量中每一个元素的值都小于θ的根号),则 θ小 w的每一项就很小。
θ越小,对 w的L2范数限制就更强,极端情况就是θ=0,则只剩下偏移b了。(如 = 0.01,0.1,1)

④ 约束就是正则项。每个特征的权重都大会导致模型复杂,从而导致过拟合。控制权重矩阵范数可以使得减少一些特征的权重,甚至使他们权重为0,从而导致模型简单,减轻过拟合。

在这里插入图片描述

【正文】基于均方范数作为柔性限制

常用下图中的函数:(上图只是为了给大家更好的直观理解,即 通过θ确实能限制w的范围)
【通俗理解】拟合得好就奖励,拟合不好有惩罚
λ是一个平滑的,不像上图红框这样的硬性限制。
w*: w的最优解
在这里插入图片描述

权重参数取值范围与模型复杂度关系理解

如果通过各种手段(如本节的L2范数 即 罚项 即 正则项权重)只是限制 模型参数(如 权重w)的取值的选择范围小,那么 模型容量就小了
即 如果不限制,那么 w取值范围很大, 模型的权重w可以变化的很大、不柔和,那么 理论上可以变成各种模型(即 曲线的变化可能幅度很大),那么 模型复杂度就可能很大。但如果w范围很小,那么 能学出的模型的 类型就会比较少,模型不复杂,你只能学出比较简单的模型
【简单来说就是 如果一个多项式中的高次项的系数变小了,函数也就变平滑了】

演示与理解

(弹幕说)绿线的中心点是最优解,也就是argmin loss,如果没有WD,会一直向绿线靠拢,w范数增加,而要让WD也变小的话,需要一直向原点靠拢,w范数要将小,这样就形成了拉扯,能够很好的应付过拟合。
WD:指权重衰退 weight decay

【下图说明】
下图中:横纵坐标为w向量的两个元素(即w1和w2)(假设L是一个二次函数,新引入的罚项也是一个二次函数)
绿线:损失L的等高线。如果想只优化损失L,则 最优解在绿线中心 即 w~(在此处 L的梯度为0)
黄线:假设罚项(黄框)是个二次函数,则 该二次函数的等高线为黄色线
(弹幕说:等高线就是地理上的等高线 这里应该叫等值线,即loss_func的值在这一条线(圈)上loss相等,联想一下低维loss_func的实际图像,这个只不过是把那个从上方拍扁)
w
:相当于损失函数等高线和罚函数等高线的平衡点,
【体会】回想之前的损失函数与梯度,当 平方损失函数 离原点越远、梯度越大、向原点的拉扯力就越大,当离原点越近、梯度越小、拉扯力就越小

【整体上理解柔性引入罚项对损失的影响】罚项的引入,使得 原损失函数(绿线)的最优解 向原点靠拢了(从下图中 w~* => w*),那么 w1、w2的值都变小了,从模型复杂度的数值角度来说,模型复杂度变小了(因为 衡量模型容量、模型复杂度有两个因素:参数数量和参数值的取值范围,此处相当于参数取值范围变小了)
在这里插入图片描述
在这里插入图片描述

参数更新法则

【权重衰退】每次计算梯度时,先把当前权重(如wt)减小,然后再去计算梯度
wt+1和之前梯度公式没有本质区别,只是 每次 wt先乘以一个小于1的正数,会变小一点
在这里插入图片描述

代码

从零实现

本节中罚项就写在了目标函数(即损失函数中)
在这里插入图片描述

在这里插入图片描述
线性回归问题,b为0.05,w为0.01,xi是随机的输入, 最后是 噪音
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
效果图:
(1)不使用正则化(真正学习到的w=13 理论上的w=0.01,相差的还是很大)
明显是过拟合了,因为 在训练误差一直在减小,但是 测试集(严格来说 即之前讲的验证集)上的误差不变,二者之间的差距一直在扩大
在这里插入图片描述
(2)正则化权重lambd=3:明显已经 减轻了过拟合的程度(但学到的w是0.3 还是比 实际的w=0.01偏大的多),但只是因为 数据集太小了,100个epoch没完全解决过拟合。
也可以通过调大lambda来 减小w
在这里插入图片描述

%matplotlib inline
import torch
from torch import nn
from d2l import torch as d2l
# 数据越简单,模型越复杂,越容易过拟合。四个参数分别为训练样本数、测试样本数、特征维度(特征向量中有多少种特征)
n_train, n_test, num_inputs, batch_size = 20, 100, 200, 5 
true_w, true_b = torch.ones((num_inputs,1)) * 0.01, 0.05 # 真实的w和b
train_data = d2l.synthetic_data(true_w, true_b, n_train) # 生成人工数据集
train_iter = d2l.load_array(train_data, batch_size)  # 读取数组
test_data = d2l.synthetic_data(true_w, true_b, n_test)
test_iter = d2l.load_array(test_data, batch_size, is_train=False)# 初始化模型参数
def init_params():w = torch.normal(0,1,size=(num_inputs,1),requires_grad=True)  # 均值为0、方差为1、长度为200的向量b = torch.zeros(1,requires_grad=True)return [w,b]# 【本节核心】定义L2范数惩罚
def l2_penalty(w):return torch.sum(w.pow(2)) / 2# 定义训练函数
def train(lambd):  # 正则化权重项lambda(用lambd是想 和python关键字lambda区分)w, b = init_params()net, loss = lambda X: d2l.linreg(X, w, b), d2l.squared_loss  # 上面圈2定义的线性回归公式(python匿名函数、函数式编程?)num_epochs, lr = 100, 0.003animator = d2l.Animator(xlabel='epoch',ylabel='loss',yscale='log',xlim=[5,num_epochs],legend=['train','test'])  # 动画# 标准的训练过程for epoch in range(num_epochs):for X, y in train_iter:#with torch.enable_grad():l = loss(net(X),y) + lambd * l2_penalty(w)  # 与之前唯一的区别(引入了 罚项)l.sum().backward()d2l.sgd([w,b],lr,batch_size)if(epoch+1) % 5 == 0:if(epoch+1) % 5 ==0:animator.add(epoch + 1, (d2l.evaluate_loss(net, train_iter, loss), d2l.evaluate_loss(net,test_iter,loss)))print('w的L2范数是',torch.norm(w).item()) 
基于框架实现

本节中罚项(即 lambda相关的)就写在了 pytorch提供的sgd接口中的 weight decay参数中,和 从零实现的那种写法的效果一样

弹幕说:简洁实现前面一直都这样方式呀 1.建立网络 2. 损失函数 3. 优化器(根据反向传播求得梯度 用优化器更具体都来更新参数) 4. 从训练集取出数据,进行训练,先梯度清0,算损失,反向传播,然后优化
在这里插入图片描述
在这里插入图片描述

# 简洁实现
def train_concise(wd):net = nn.Sequential(nn.Linear(num_inputs,1))for param in net.parameters():param.data.normal_()loss = nn.MSELoss()num_epochs, lr = 100, 0.003# 【与之前的唯一区别】惩罚项既可以写在目标函数里面(如上一节的从零实现),也可以写在训练算法里面(如此处),每一次在更新之前把当前的w乘以衰退因子weight_decay    trainer = torch.optim.SGD([{"params":net[0].weight,"weight_decay":wd},{"params":net[0].bias}],lr=lr)                  animator = d2l.Animator(xlabel='epoch',ylabel='loss',yscale='log',xlim=[5,num_epochs],legend=['train','test'])                   for epoch in range(num_epochs):for X, y in train_iter:with torch.enable_grad():trainer.zero_grad()l = loss(net(X),y)l.backward()trainer.step()if(epoch + 1) % 5 == 0:animator.add(epoch + 1, (d2l.evaluate_loss(net, train_iter, loss), d2l.evaluate_loss(net,test_iter,loss)))print('w的L2范数是',net[0].weight.norm().item()) 

QA

在这里插入图片描述
1.不支持
但可以将复数看成二维,用二维数据来实现

2.只是限制 模型参数(如 权重w)的取值的选择范围小,那么 模型容量就小了
即 如果不限制,那么 w取值范围很大, 模型的权重w可以变化的很大、不柔和,那么 理论上可以变成各种模型(即 曲线的变化可能幅度很大),那么 模型复杂度就可能很大。但如果w范围很小,那么 能学出的模型的 类型就会比较少,模型不复杂,你只能学出比较简单的模型
【简单来说就是 如果一个多项式中的高次项的系数变小了,函数也就变平滑了】

  1. 就改成这样
    在这里插入图片描述

4.【权重衰减的值 即 lambda】一般取 1e-3、1e-4
如果模型很复杂,权重衰退不会带来特别好的效果

【L2范数】||w|| 或 ||w||2 。注:省略右下角角标2是指 L2范数是默认的范数。即 一般说范数,就指L2范数
在这里插入图片描述

本节用的是L2范数的平方

6.【好问题】
(1)不使用正则化(真正学习到的w=13 理论上的w=0.01,相差的还是很大)
(2)正则化权重lambd=3:明显已经 减轻了过拟合的程度(但学到的w是0.3 还是比 实际的w=0.01偏大的多)

因为 实际上数据中有很多噪音,模型 在学习时也会受他们的干扰,尝试去拟合噪音
实际的学习中是无法学习到理论上的最优解的(而且大概率实际学到的权重w很大),因为 实际数据中有噪音,如果一点噪音没有,那么可能就不需要lambda了,因为你不会过拟合到一些奇怪的地方了

在这里插入图片描述

在这里插入图片描述

7.不是让w变得更平均,即 一般模型实际学到的w都是偏大的,即overfit的,此时 用lambda可以往回拉w。但如果你的模型没学到overfit,往回拉也没用。

8.1e-2,1e-3,1e-4

9.lambda不会有特别大的用,会有一点点好处。
比如lambda=0,看下效果有多不好,再 尝试 1e-3、1e-2等, 看看有没有更好的效果

在这里插入图片描述

10.可以证明的,也可以自己试一下。
弹幕说:林轩田老师《机器学习基石》中有讲过

13-丢弃法(dropout)

比权重衰退效果好
现在认为drop是正则项(正则化) (之前一开始hinton提出dropout时 认为就是 每次 随机丢弃一些权重后 得到了 子神经网络,最后对这些神经网络的结果取平均 效果会更好,但现在一般认为 dropout是正则项)
在这里插入图片描述
在这里插入图片描述

理论

退学率:

在这里插入图片描述

引言

好的模型要有很好的鲁棒性

此处的噪音指 随机的加噪音,与上一节的噪音不同(上节指固定噪音)
dropout:在层与层之间加噪音(从这个角度来看,dropout也是正则)

弹幕说:
因为随机扰动就不会让模型完全能拟合成输入数据的样子
Dropout 引入的噪音与常规的数据噪声不同。因为是随机加入,这种“强制学习”让模型更加鲁棒,更能够关注整体特征而非局部模式
在这里插入图片描述

【Dropout定义】无偏差的加入噪音

【基本理解】dropout是正则化的一种方式
【dropout作用场景】
(1)位置:一般应用在全连接的隐藏层的输出上(不会作用于卷积层)
(2)时间:且只作用在训练过程中,不作用于预测时(具体是每一个layer在调用forward进行前向计算时 随机丢弃一次)
(即 训练时 会在每一个forward时,随机丢弃掉一些神经元在这一个forward时不参加计算和更新,但是在预测时是 所有的神经元都参加)

【概率p】丢弃概率(如本节中的p)是 控制模型复杂度的超参数(一般取0.1、0.5、0.9)

下图中x指 一层到下一层之间的 输出
E[x’]=x:其中E[x’]指x‘的期望。即 希望 虽然对x引入了噪音变成了x’,但 x’的期望(即平均下来)还是等于原x
p为概率,xi为输入x(是向量)的第i个元素
对于x经扰动计算后的结果x’: (一定概率上将x变为0,一定概率上将x变大)
(1)在概率p下 将 输入变为0;
(2)其他情况下 将输入x变大得到x’
在这里插入图片描述

在这里插入图片描述

【训练过程中】使用dropout

假设神经网络是如下图的单隐藏层:
h为第一个隐藏层的输出
在这里插入图片描述

【预测过程中】使用dropout

推理(即预测)中是不需要正则(即 此处的dropout的),因为预测时 不需要权重发生变化
即推理时 dropout不改变输入h,直接得到输出h
在这里插入图片描述

代码实现

从零实现

在这里插入图片描述

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

在这里插入图片描述
【精髓】每次调用该函数时, 输入的向量中的元素有50%概率被置为0(即 被丢掉)
在这里插入图片描述

# 实现dropout_layer函数,该函数以dropout的概率丢弃张量输入x中的元素
import torch
from torch import nn
from d2l import torch as d2ldef dropout_layer(X, dropout):  # dropout:丢弃概率passert 0 <= dropout <= 1 # dropout大于等于0,小于等于1,否则报错if dropout == 1:return torch.zeros_like(X) # 如果dropout为1,则X返回为全0if dropout == 0:return X # 如果dropout为1,则X返回为全原值# mask可以理解成一个布尔型的张量,每一个值表示X对应下标的值是否要dropoutmask = (torch.randn(X.shape)>dropout).float() # 【相当于一个掩膜过滤器】取X.shape里面均值为0,标准差为1,如果值大于dropout,则把它选出来print("X.shape:",X.shape)print("mask:",mask)print("torch.randn(X.shape):",torch.randn(X.shape))#print((torch.randn(X.shape)>dropout)) # 返回的是布尔值,然后转布尔值为0、1return mask * X / (1.0 - dropout)  # 此处写mask* 而不是X[mask]=0的原因是  对于CPU、GPU来说,做乘法的速度效率远大于 通过索引设置元素值X = torch.arange(16,dtype=torch.float32).reshape((2,8))
print("X:",X)
print("dropout_layer(X, 0.):",dropout_layer(X, 0.))  # dropout=0时,输入=输出
print("dropout_layer(X, 0.5):",dropout_layer(X, 0.5)) # 有百分之50的概率变为0
print("dropout_layer(X, 1.):",dropout_layer(X, 1.)) # dropout=1时,全丢弃,输出均为0

【定义具有两个隐藏层的多层感知机,每个隐藏层包含256个单元】

# 定义具有两个隐藏层的多层感知机,每个隐藏层包含256个单元
num_inputs, num_outputs, num_hiddens1, num_hiddens2 = 784, 10 ,256, 256dropout1, dropout2 = 0.2, 0.5class Net(nn.Module):def __init__(self, num_inputs, num_outputs, num_hiddens1, num_hiddens2,is_training=True):       super(Net, self).__init__()self.num_inputs = num_inputsself.training = is_trainingself.lin1 = nn.Linear(num_inputs, num_hiddens1)self.lin2 = nn.Linear(num_hiddens1, num_hiddens2)self.lin3 = nn.Linear(num_hiddens2, num_outputs)self.relu = nn.ReLU()def forward(self, X):H1 = self.relu(self.lin1(X.reshape((-1,self.num_inputs))))if self.training == True: # 如果是在训练,则作用dropout,否则则不作用H1 = dropout_layer(H1, dropout1)H2 = self.relu(self.lin2(H1))if self.training == True:H2 = dropout_layer(H2,dropout2)out = self.lin3(H2) # 输出层不作用dropoutreturn outnet = Net(num_inputs, num_outputs, num_hiddens1, num_hiddens2)# 训练和测试
num_epochs, lr, batch_size = 10, 0.5, 256
loss = nn.CrossEntropyLoss()
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
trainer = torch.optim.SGD(net.parameters(),lr=lr)
d2l.train_ch3(net,train_iter,test_iter,loss,num_epochs,trainer)

在这里插入图片描述

基于框架实现

在这里插入图片描述

在这里插入图片描述

import torch
from torch import nn
from d2l import torch as d2l# 简洁实现
num_epochs, lr, batch_size = 10, 0.5, 256
dropout1, dropout2 = 0.2, 0.5
loss = nn.CrossEntropyLoss()
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)net = nn.Sequential(nn.Flatten(),nn.Linear(784,256),nn.ReLU(),nn.Dropout(dropout1),nn.Linear(256,256),nn.ReLU(),nn.Dropout(dropout2),nn.Linear(256,10))def init_weights(m):if type(m) == nn.Linear:nn.init.normal_(m.weight,std=0.01)net.apply(init_weights)trainer = torch.optim.SGD(net.parameters(),lr=lr)
d2l.train_ch3(net,train_iter, test_iter, loss, num_epochs,trainer)

QA

在这里插入图片描述

被dropout随机置零的那些权重 梯度也会变为0,即 这些权重不会被更新

可以简单理解 dropout就是正则项。
丢弃不合理即 丢弃概率没设置好,要么太小,即 dropout对模型的正则效果不好、正则程度不够大,即还是过拟合;要么太大,即欠拟合了

正确性和可重复性是两回事,机器学习没有正确性(感觉就是没有最优解、最标准的答案)

注意的一般都是可重复性:固定随机种子,一般 重复run 的结果应该是一样或差不多的。
但其实也没必要保持可重复性
随机性也不是个坏事情,可以变得更平滑,能应对各种情况

cudnn的计算结果随机性比较大。

14.是的

15.是的
(每一个layer在调用forward前向计算时 随机丢弃一次)
例如:如果有三个隐藏层,用了3个dropout layer,会call 3次

在这里插入图片描述

BN是给卷积层用的,dropout是给全连接层用的
二者没有相关性

有可能,但是 不care,一般最后收敛时都会平滑

预测时不对权重做更新,而dropout是正则化的一种,而正则化的作用是 让模型在更新权重时的模型复杂度低点。

dropout不改变标签,只是改变 隐藏层的输出。
改变标签也是一种正则化的方式

即推导 期望E不变的过程, 如果使用了dropout,那么同时也会做 除以1-p的计算

在这里插入图片描述

是的。

dropout就是正则化的具体方式之一,L2是另一种正则化方式之一

也可以一起使用

23.同20

24.无须担心。

可理解为丢弃前一层的输出 或丢弃后一层的输入,本质上一样

weight decay对于各个层都能用,但是dropout只适用于全连接层
dropout更好调参(即丢弃概率)
比如隐藏层大小是64(即64个神经元) 使用后也没过拟合,那么下一步可以 将隐藏层改为128,dropout=0.5(即 理论上看是等效的),那么后者的效果可能会更好。

首先希望模型足够强,然后通过正则令其不要学偏。如 一个人的能力是模型复杂度,性格是容易学偏的东西, 那么可能大家会希望和 性格差但能力强的人做事情,然后去 fit其性格

后面会讲

有可能会造成。
但没听过 因为使用了dropout而需要将lr调大

目前没有,transformer可以看做是一种特殊的核方法

这篇关于学习笔记-李沐动手学深度学习(四)(12-13,权重衰退、L2正则化、Dropout)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/647077

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个