TowardsDataScience 2023 博客中文翻译(二百零五)

原文:TowardsDataScience

协议:CC BY-NC-SA 4.0

核密度估计逐步讲解

原文:towardsdatascience.com/kernel-density-estimation-explained-step-by-step-7cc5b5bc4517?source=collection_archive---------0-----------------------#2023-08-15

KDE 公式的直观推导

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Jaroslaw Drapala

·

关注 发表在 Towards Data Science ·7 min read·2023 年 8 月 15 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由 Marcus Urbenz 提供,来源于 Unsplash

介绍

为了感知数据分布,我们绘制概率密度函数(PDF)。当数据很好地符合常见的密度函数(例如正态分布、泊松分布、几何分布等)时,我们会感到满意。然后,可以使用 最大似然方法 将密度函数拟合到数据上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不幸的是,数据分布有时过于不规则,并不像任何常见的 PDF。在这种情况下,核密度估计器(KDE)提供了一种合理且视觉上愉悦的数据分布表示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我将带你了解构建 KDE 的步骤,依靠你的直觉,而不是严格的数学推导。

核函数

理解 KDE 的关键是把它当作由构建块组成的函数,类似于不同的物体由乐高砖块构成。KDE 的独特之处在于它仅使用一种砖块,称为核函数(‘一个砖块统治所有’)。这种砖块的关键特性是能够移动和伸缩/收缩。每个数据点都有一个砖块,KDE 是所有砖块的总和

KDE 是由一种构建块组成的复合函数,称为核函数。

核函数是对每个数据点单独评估的,这些部分结果被求和形成 KDE。

对 KDE 的第一步是仅关注一个数据点。如果让你为一个单一的数据点创建 PDF,你会怎么做?首先,取x = 0。最合逻辑的方法是使用一个在该点上正好峰值并随着距离衰减的 PDF。函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这样就可以解决问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然而,由于 PDF 应该在曲线下具有单位面积,我们必须对结果进行重新缩放。因此,该函数必须除以 2π的平方根,并通过√2 进行伸缩(3Blue1Brown提供了这些因素的优秀推导):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最终,我们得到我们的乐高砖块,称为核函数,它是一个有效的 PDF:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个核函数相当于均值为零、方差为单位的高斯分布。

我们先玩一会儿。我们将从学习如何沿* x *轴移动它开始。

取一个数据点xᵢ - 我们数据集X中的第i个点。通过减去参数可以实现平移:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了使曲线更宽或更窄,我们只需在参数中加入一个常数h(即所谓的核带宽)。它通常作为分母引入:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然而,核函数下的面积因此乘以h。因此,我们必须通过除以h将其恢复到单位面积:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可以选择任何h值。以下是它如何工作的一个示例。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

h 越大,PDF 越宽。h 越小,PDF 越窄。

核密度估计器

考虑一些虚拟数据,以查看如何将方法扩展到多个点。

# dataset
x = [1.33, 0.3, 0.97, 1.1, 0.1, 1.4, 0.4]

# bandwidth
h = 0.3

对于第一个数据点,我们简单使用:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以对第二个数据点做同样的操作:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了得到前两个点的单一 PDF,我们必须将这两个单独的 PDF 结合起来:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因为我们添加了两个单位面积的 PDF,所以曲线下的面积变为 2。为了恢复到 1,我们将其除以 2:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

尽管可以使用函数 f 的完整签名以提高精度:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们将只使用 f(x) 以使符号更加简洁。

这就是它对两个数据点的工作方式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

KDE 的最终步骤是考虑 n 个数据点

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

核密度估计器是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们来享受一下重新发现的 KDE。

import numpy as np
import matplotlib as plt

# the Kernel function
def K(x):
    return np.exp(-x**2/2)/np.sqrt(2*np.pi)

# dummy dataset
dataset = np.array([1.33, 0.3, 0.97, 1.1, 0.1, 1.4, 0.4])

# x-value range for plotting KDEs
x_range = np.linspace(dataset.min()-0.3, dataset.max()+0.3, num=600)

# bandwith values for experimentation
H = [0.3, 0.1, 0.03]
n_samples = dataset.size

# line properties for different bandwith values
color_list = ['goldenrod', 'black', 'maroon']
alpha_list = [0.8, 1, 0.8]
width_list = [1.7,2.5,1.7]

plt.figure(figsize=(10,4))
# iterate over bandwith values
for h, color, alpha, width in zip(H, color_list, alpha_list, width_list):
    total_sum = 0
    # iterate over datapoints
    for i, xi in enumerate(dataset):
        total_sum += K((x_range - xi) / h)
        plt.annotate(r'$x_{}$'.format(i+1),
                     xy=[xi, 0.13],
                     horizontalalignment='center',
                     fontsize=18,
                    )
    y_range = total_sum/(h*n_samples)
    plt.plot(x_range, y_range, 
             color=color, alpha=alpha, linewidth=width, 
             label=f'{h}')

    plt.plot(dataset, np.zeros_like(dataset) , 's', 
             markersize=8, color='black')

plt.xlabel('$x$', fontsize=22)
plt.ylabel('$f(x)$', fontsize=22, rotation='horizontal', labelpad=20)
plt.legend(fontsize=14, shadow=True, title='$h$', title_fontsize=16)
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里我们使用高斯核,但我鼓励你尝试其他核。有关常见核函数家庭的回顾,请参见 这篇论文。然而,当数据集足够大时,核的类型对最终输出没有显著影响。

使用 Python 库的 KDE

seaborn 库利用 KDE 提供了数据分布的优美可视化。

import seaborn as sns
sns.set()

fig, ax = plt.subplots(figsize=(10,4))

sns.kdeplot(ax=ax, data=dataset, 
            bw_adjust=0.3,
            linewidth=2.5, fill=True)

# plot datapoints
ax.plot(dataset, np.zeros_like(dataset) + 0.05, 's', 
        markersize=8, color='black')
for i, xi in enumerate(dataset):
    plt.annotate(r'$x_{}$'.format(i+1),
                 xy=[xi, 0.1],
                 horizontalalignment='center',
                 fontsize=18,
                )
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Scikit learn 提供了 KernelDensity 函数来完成类似的工作。

from sklearn.neighbors import KernelDensity

dataset = np.array([1.33, 0.3, 0.97, 1.1, 0.1, 1.4, 0.4])

# KernelDensity requires 2D array
dataset = dataset[:, np.newaxis]

# fit KDE to the dataset
kde = KernelDensity(kernel='gaussian', bandwidth=0.1).fit(dataset)

# x-value range for plotting KDE
x_range = np.linspace(dataset.min()-0.3, dataset.max()+0.3, num=600)

# compute the log-likelihood of each sample
log_density = kde.score_samples(x_range[:, np.newaxis])

plt.figure(figsize=(10,4))
# put labels over datapoints
for i, xi in enumerate(dataset):
    plt.annotate(r'$x_{}$'.format(i+1),
                 xy=[xi, 0.07],
                 horizontalalignment='center',
                 fontsize=18)

# draw KDE curve
plt.plot(x_range, np.exp(log_density), 
         color='gray', linewidth=2.5)

# draw boxes representing datapoints
plt.plot(dataset, np.zeros_like(dataset) , 's', 
         markersize=8, color='black')

plt.xlabel('$x$', fontsize=22)
plt.ylabel('$f(x)$', fontsize=22, rotation='horizontal', labelpad=24)
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Scikit learn 解决方案的优点在于它可以用作生成模型来生成合成数据样本。

# Generate random samples from the model
synthetic_data = kde.sample(100)

plt.figure(figsize=(10,4))

# draw KDE curve
plt.plot(x_range, np.exp(log_density), 
         color='gray', linewidth=2.5)

# draw boxes representing datapoints
plt.plot(synthetic_data, np.zeros_like(synthetic_data) , 's', 
         markersize=6, color='black', alpha=0.5)

plt.xlabel('$x$', fontsize=22)
plt.ylabel('$f(x)$', fontsize=22, rotation='horizontal', labelpad=24)
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结论

总结一下,KDE 使我们能够从任何数据创建一个视觉上吸引人的 PDF,而不需要对基础过程做任何假设。

KDE 的显著特点:

  • 这是由单一类型的构建块组成的函数,称为核函数

  • 这是非参数估计器,这意味着它的功能形式由数据点决定;

  • 生成的 PDF 的形状受到核带宽 h 值的严重影响;

  • 为了拟合数据集,不需要优化技术

KDE 应用于多维数据是简单的。但这是另一个话题。

除非另有说明,所有图片均由作者提供。

参考文献

[1] S. Węglarczyk*,* 核密度估计及其应用 (2018), ITM 网络会议,第 23 卷,EDP 科学出版社。

[2] Y. Soh, Y. Hae, A. Mehmood, R. H. Ashraf, I. Kim: 性能 各种核密度估计函数的评估 (2013), 应用科学开放期刊,第 3 卷,第 58–64 页。

多维数据的核密度估计器

原文:towardsdatascience.com/kernel-density-estimator-for-multidimensional-data-3e78c9779ed8?source=collection_archive---------1-----------------------#2023-10-04

使用实际数据集演示 KDE

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Jaroslaw Drapala

·

关注 发表在Towards Data Science ·11 分钟阅读·2023 年 10 月 4 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由Marco Bianchetti拍摄,发布在Unsplash

我希望通过考虑多维数据来扩展我之前的故事,讲解核密度估计器(KDE)。

我将首先提供一个关于主题的数学概述,然后你将获得 Python 代码以实验双变量 KDE。接下来,我将讲解高斯核的一些属性。最后但同样重要的是,使用 高度和权重系外行星 数据集,我将演示如何将 KDE 应用于实际数据。

1. 数学介绍

KDE 是一个由几个类似的核函数组成的复合函数。我选择了高斯核,因为它易于分析。这个函数是多维高斯的原型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这本身是一个扩展

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

到许多维度。

向量 x 总共有 d 维(特征),上标表示特征的索引:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

H 是一个 dd 的系数矩阵,决定了函数的形式。以下是一个二维 (d = 2) 的例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

也许你还记得,只有曲线下的面积为单位的函数才能加入 PDF 俱乐部。因此,为了获得多变量高斯核函数,我们必须添加一些归一化项:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可以自行验证,插入 d = 1 会得到一个标准的单维高斯函数。

矩阵 H 作为协方差矩阵。在上面的双变量案例 (d = 2) 中,h₁₁ 和 h₂₂ 分别对应于 x⁽¹⁾ 和 x⁽²⁾ 的方差,而 h₁₂ = h₂₁ 代表 x⁽¹⁾ 与 x⁽²⁾ 的协方差。这就是为什么矩阵 H 被认为是对称的。因此,在双变量情况下,用户可以通过三个参数来改变核函数。

核函数是一个自定义的模板函数,用于对每个数据点应用,以便使用简单的求和构建整个数据集的 PDF:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 x 是第 i 个数据点:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果所有这些数学内容让你感到不安,不用担心。我将提供 Python 代码来创建可视化,展示其工作原理。要记住的主要点是:

核密度估计器是一个复合函数,由分配给每个数据点的核函数实例组成。

2. Python 代码使双变量 KDE 变为现实

这里有可以作为实验平台的代码,用于双变量高斯核和 KDE 实验。

导入部分先行:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import pandas as pd
import seaborn as sns

# to generate a visually appealing images with dataframes
import dataframe_image as dfi

# to make functions with some arguments fixed
from functools import partial

# Latex typefaces will be used for math symbols in figures.
plt.rcParams.update({
    "text.usetex": True,
    "font.family": "sans-serif",
    "font.sans-serif": ["Helvetica"]
})

双变量高斯核函数 K 需要一个 2 乘 2 的 numpy 数组 H。函数 K 接受一个类似网格的数组作为参数 x

def K(x, H):

    # unpack two dimensions
    x1, x2 = x

    # extract four components from the matrix inv(H)
    a, b, c, d = np.linalg.inv(H).flatten()

    # calculate scaling coeff to shorten the equation
    scale = 2*np.pi*np.sqrt( np.linalg.det(H))

    return np.exp(-(a*x1**2 + d*x2**2 + (b+c)*x1*x2)/2) / scale

KDE 为每个数据点调用核函数 K 并累加所有结果,如 f(x) 所述。如果你不打算在应用程序中直接调用 K,可以将其定义嵌套在 KDE 中。

def KDE(x, H, data):

    # unpack two dimensions
    x1, x2 = x

    # prepare the grid for output values
    output = np.zeros_like(x1)

    # process every sample
    for sample in data:
        output += K([x1-sample[0], x2-sample[1]], H)

    return output

注意,对于单个数据点,f(x)等于K(x)。

最后的函数show_pdf显示二维函数func并将数据点data添加到其中,但data不必与函数func相关。PDF 有两种视角:轮廓图和表面图。

def show_pdf(func, data, 
             resolution = 100, 
             contours_density = 8,
             surf_density = 40,
             figsize=(10,5), cmap=cm.cividis,
             aspect='equal', margins='auto',
             s = 40, edgecolor='black', 
             markeralpha=1, markercolor='white'
            ):

    # range for x and y axis is determined from the dataset
    x1_min, x2_min = data.min(axis=0)
    x1_max, x2_max = data.max(axis=0)

    # plus some extra margins
    if margins == 'auto':
        x1_pad = max(3, int(0.3*(x1_max-x1_min)))
        x2_pad = max(3, int(0.3*(x2_max-x2_min)))
    else:
        x1_pad = int(margins*(x1_max-x1_min))
        x2_pad = int(margins*(x2_max-x2_min)) 

    x1_range = np.linspace(start=x1_min-x1_pad, 
                           stop=x1_max+x1_pad, num=resolution)
    x2_range = np.linspace(start=x2_min-x2_pad, 
                           stop=x2_max+x2_pad, num=resolution)

    X1_grid, X2_grid = np.meshgrid(x1_range, x2_range)

    # the given func is called here 
    Z_grid = func([X1_grid, X2_grid])

    # draw a figure
    fig = plt.figure(figsize=figsize)
    ax = fig.add_subplot(1, 2, 1)
    c = ax.contourf(X1_grid, X2_grid, Z_grid, 
                    contours_density, cmap=cmap)
    c2 = ax.contour(X1_grid, X2_grid, Z_grid, 
                    contours_density, colors='black')
    ax.set_xlabel(r'$x^{(1)}$', fontsize=16, labelpad=7)
    ax.set_ylabel(r'$x^{(2)}$', fontsize=16, rotation=0, labelpad=8)
    ax.scatter(data[:,0], data[:,1], marker='s', 
               color=markercolor, s=s, edgecolor=edgecolor, alpha=markeralpha)
    ax.set_aspect(aspect)
    plt.clabel(c2, inline=True, fontsize=10)

    ax = fig.add_subplot(1, 2, 2, projection='3d')
    ax.plot_surface(X1_grid, X2_grid, Z_grid, 
                    rcount=surf_density, 
                    ccount=surf_density, cmap=cmap) 
    ax.set_xlabel(r'$x^{(1)}$', fontsize=14)
    ax.set_ylabel(r'$x^{(2)}$', fontsize=14)

    plt.show()

3. 高斯核的属性

让我们从最简单的情况开始,用单位矩阵H表示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

坐标轴的原点作为一个数据点。

为了使用提供的代码,你首先需要定义数组H和至少一个数据点(data数组必须是二维的)。然后你可以对这些数据调用KDE。请注意,show_pdf接受一个函数func作为输入,并将其与网格状数组x作为第一个参数进行调用。因此,我们调用了functools库中的partial方法,它生成了KDE_partial函数,执行与KDE相同的操作,只是第二个参数H是固定的。这就是我将在本故事中使用代码的方法。

# covariance matrix
H = [[1, 0],
     [0, 1]]

# a single point to make PDF
data = np.array([[0,0]])

# fix arguments 'H' and 'data' of KDE function for further calls
KDE_partial = partial(KDE, H=np.array(H), data=data)

# draw contour and surface plots
show_pdf(func=KDE_partial, data=data)

高斯核围绕数据点居中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有 0 协方差的高斯核。

让我们通过将非对角元素固定为 0.5 来引入一些相关性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

KDE 的形状变得倾斜和更薄。半主轴平行于x⁽¹⁾ = x⁽²⁾线。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有 0.5 协方差的高斯核。

随着协方差系数的增加,KDE 变得更加狭窄。由于函数值变化更快,我提高了图形的分辨率。

H = [[1, 0.9],
     [0.9, 1]]

KDE_partial = partial(KDE, H=np.array(H), data=data)

# when the function gets too sharp, boost the resolution
show_pdf(func=KDE_partial, data=data, 
         resolution=300, surf_density=50)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有 0.9 协方差的高斯核。

你可以很容易地预测当协方差变为负数时会发生什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有-0.5 协方差的高斯核。

这些示例清楚地展示了高斯 PDF 如何跟随数据的相关结构。

你可能会想知道如何旋转高斯 PDF。为此,请取一个旋转矩阵 R(我更喜欢顺时针版本):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

并将H替换为RHRᵀ。以下是一个方便的函数,它返回表示按α度(以弧度为单位)旋转的矩阵的数组。

def angle2rotation_matrix(angle):
    return np.array([ [np.cos(angle), np.sin(angle)],
                     [-np.sin(angle), np.cos(angle)] ])

R = angle2rotation_matrix(angle=(-1/10)*np.pi)

由于旋转对称高斯没有意义,我通过改变矩阵H的对角组件来拉伸它。

# the first axis scale is expanded twice
H = np.array([[2, 0],
              [0, 0.2]])

# rotation
H = R @ H @ R.T

data = np.array([[0,0]])

KDE_partial = partial(KDE, H=np.array(H), data=data)
show_pdf(func=KDE_partial, data=data)

注意,第一个轴的尺度扩展了两倍,而第二个尺度缩小了五倍,这是因为对矩阵H的对角元素应用了不同的值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

拉伸和旋转的高斯核。

4. 身高和体重数据集

机器学习仓库中有几个现成的数据集。这就是为什么我感到惊讶的是,几乎每个常见的包含身高和体重列的数据集都是合成生成的。为了获得一些真实世界的数据,我要求我的学生提交他们的身高和体重,这个数据集现在可以在我的Github 仓库中找到。

让我们来看看这些数据。

filename = 'HeightsWeightsGender_dataset.xlsx'

# my Github repo
URL = "https://raw.githubusercontent.com/jdrapala/datasets/main/" + filename

# download the data form URL as a DataFrame
df = pd.read_excel(URL)

# make it look appealing
df_styled = df.sample(7).style.background_gradient(axis=0, gmap=df['Weight'], cmap='cividis')

# and export to file
dfi.export(df_styled, 'filename.png', dpi=300)

# extract numpy array from DataFrame
data = df[['Height','Weight']].to_numpy()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从我的学生那里收集的身高和体重数据样本。

x⁽¹⁾表示身高,x⁽²⁾表示体重。

以单位矩阵H作为第一次尝试可视化数据集。

H = [[1, 0],
     [0, 1]]

KDE_partial = partial(KDE, H=np.array(H), data=data)

show_pdf(func=KDE_partial, data=data, aspect='auto', margins=0.15)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用的核函数过小。

结果很糟糕;PDF 在数据点周围的狭窄区域内有峰值,而其他地方几乎降至零。

我们通过将整个矩阵H乘以常数s(用于大小)来增大核函数。取s=10。

H = [[1, 0],
     [0, 1]]

s = 10

KDE_partial = partial(KDE, H=s*np.array(H), data=data)
show_pdf(func=KDE_partial, data=data, aspect='auto', margins=0.15)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

核大小应进一步增加。

单个峰值结合成一个漂亮的 PDF,但它仍然显得过于详细。因此,将s增加到 64,以获得以下结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

核函数似乎大小合适。

这个核函数的大小似乎适合这个数据集。

将我们手工制作的 PDF 输出与 seaborn KDE 进行比较。

# draw PDF
ax = sns.kdeplot(x='Height', y='Weight', data=df, 
                 fill=True, cmap=cm.cividis, 
                 bw_adjust=1.1)
# draw datapoints 
ax.plot(df['Height'], df['Weight'], 's', color='white', 
        markersize=6, markeredgecolor='black', markeredgewidth=0.7)
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

矩阵H中的非零协方差元素对 PDF 会产生什么影响?对于协方差条目值为 0.8,返回以下 PDF。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这似乎是前一图形的一个风天变体。

PDF 质量明显下降。

类似的实验表明,带有单位矩阵H的高斯核在实际情况中是足够的。因此,一切可能归结为选择适当的参数s值,这决定了核函数所覆盖的区域,就像单变量情况下的带宽h一样。

作为一个练习,考虑为我在众多医学数据分析研究项目中收集的大型身高和体重数据创建一个 PDF 表示。然而,请记住,这些数据来自于心脏病、糖尿病和其他疾病的患者,因此在为一般人群得出结论时要谨慎。我对这些数据的质量也有一些担忧,因为它是从许多医院收集的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从各种医院收集的身高和体重数据。

5. 外行星数据集

KDE 在多模态分散数据中尤其有用。因此,我给你介绍另一个数据集。我相信我们都对鸢尾花数据集感到厌倦了。

这个数据集是直接从Exoplanet Orbit Database 网页下载的。由于文件很大且包含混合数据类型,我不得不在read_csv方法中设置low_memory=False

我选择了两列:系外行星的质量(以 Jupyter 质量为单位)和它与母星的距离(以天文单位为半长轴)。

URL = "http://exoplanets.org/csv-files/exoplanets.csv"

df = pd.read_csv(URL, low_memory=False)

# drop rows containing missing values
df = df[['NAME', 'MSINI', 'A']].dropna()

# i don't like orignal columns names
df = df.rename(columns={'NAME': 'Name', 
                        'MSINI':'Mass', 
                        'A': 'Distance'}).set_index('Name').astype(float)

# some masses are not missing but equal to zero, let's get rid of them too
df = df.drop(df[df['Mass'] == 0].index)

# # make it look appealing
df_styled = df.sample(7).style.background_gradient(axis=0, 
                                                   gmap=df['Mass'], 
                                                   cmap='cividis')
dfi.export(df_styled, 'filename.png', dpi=300)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一份系外行星数据集的示例。

让我们快速查看数据在对数尺度上的分布情况。

with plt.style.context('seaborn'):
    sns.scatterplot(data=df, x='Mass', y='Distance')

plt.xscale('log')
plt.yscale('log')
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对数尺度上的系外行星数据。

KDE 为s = 0.7 生成了视觉上令人满意的 PDF,使用了这些数据。

# logarithmic scale is more appropriate for this data
data = np.log(df[['Mass','Distance']].to_numpy())

H = [[1, 0],
     [0, 1]]

# size of the kernel
s = 0.7

KDE_partial = partial(KDE, H=s*np.array(H), data=data)

show_pdf(func=KDE_partial, data=data, aspect='auto', 
         markeralpha=1, s=1.5, margins=0.15)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

系外行星数据被分为三个簇,尽管左侧的簇明显更稀疏。

我建议你尝试 Scikit-learn 库中的[KernelDensity](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KernelDensity.html)方法,它允许你在 KDE 拟合数据后轻松生成合成数据。

from sklearn.neighbors import KernelDensity

# fit KDE to the dataset
kde = KernelDensity(kernel='gaussian', bandwidth=0.4).fit(data)

# Generate random samples from the model
synthetic_data = kde.sample(1000)

df = pd.DataFrame({'x1': synthetic_data[:,0], 
                   'x2': synthetic_data[:,1]})

with plt.style.context('seaborn'):
    sns.scatterplot(df, x='x1',y='x2')

plt.xlabel('Mass', fontsize=16)
plt.ylabel('Distance', fontsize=16)
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 Scikit-learn 合成生成的系外行星数据。

最后的话

精美的可视化有助于从数据中学习并得出适当的结论。KDE 使数据分布以视觉上令人愉悦的方式呈现。因此,其大多数数据探索应用归结为二变量情况。

请记住,在单点计算 KDE 值时,需要处理所有数据点,这在大规模计算中可能会耗时。在这种情况下,你应该考虑使用高斯混合模型。不过那是另一回事……

致谢

本研究使用了exoplanets.org上的系外行星轨道数据库和系外行星数据探索器。

除非另有说明,所有图片均由作者提供。

参考文献

[1] Kristan, M., Leonardis, A., Skočaj, D. 带高斯核的多变量在线核密度估计 (2011). 模式识别, 44(10–11), 第 2630–2642 页.

[2] S. Węglarczyk*,* 核密度估计及其应用 (2018), ITM web of conferences, vol. 23, EDP Sciences.

[3] Han, E., Wang, S. X., Wright, J. T., Feng, Y. K., Zhao, M., Fakhouri, O., Brown, J. I., Hancock, C. 外行星轨道数据库 II. 对 exoplanets.org 的更新 (2014). 太平洋天文学会出版物, 126(943), 827.

内核:你需要了解的一切

原文:towardsdatascience.com/kernels-everything-you-need-to-know-f5d255d95785?source=collection_archive---------0-----------------------#2023-03-06

👨‍🏫 数学

密度估计、点积、卷积及其他一切……

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Shubham Panchal

·

关注 发表在 Towards Data Science ·14 min 阅读·2023 年 3 月 6 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:作者提供的图片

内核或核函数是美丽的数学概念,用于机器学习和统计学中,形式各异。如果你是初学者,你可能会想知道内核的确切定义,但你可能会被互联网上各种博客/网站上解释的多种定义弄混。

核函数是一个令人困惑的概念,因为围绕它的知识在不同的应用中是分散的,缺乏一个将它们连接起来的常见直觉。这个(庞大的)博客旨在统一不同 ML 应用中使用的核函数的所有知识。就像大多数初学者一样,核函数让我困惑了很长时间,直到我培养出一种将所有环节连接起来的直觉。

我们从非参数模型开始我们的旅程,然后开始讨论不同类型的核函数及其在统计和机器学习中的典型应用。类似于核函数,我也尝试从数学角度解释 PCA,考虑所有的视角。你可以阅读一下:

## 主成分分析:你需要知道的一切

协方差、特征值、方差以及一切……

towardsdatascience.com

非参数模型

非参数模型是那些统计模型,它们的参数不会随着输入规模的增长而增加。需要注意的是,非参数模型并不是指‘零参数模型’,而是指它们使用的是一组固定的参数,也称为超参数,这些参数不会随着输入维度的增加而增加。一个简单的线性回归模型有参数θ,这些参数决定了超平面的斜率,其大小取决于输入x的维度。

方程 1. 一个具有可调参数的简单线性回归模型,其参数大小取决于特征数N。函数f表示给定输入x的因变量y的期望值,即E[y|x]

接下来,考虑 KNN 模型,我们通过分析测试样本的K个最近邻的类别来确定测试样本的类别。如果K = 1,我们假设测试样本与最近邻属于同一类别。这个模型没有任何随着输入维度增加而增长的参数。对于一个简单的实现,即使在处理大规模输入(从维度角度看)时,我们也只需要一个单一的参数K

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1. K 最近邻模型工作原理的可视化描述。这里的假设是测试样本属于与 K 个最近邻相同的类别。图片来源:作者提供的图片

KNN 是一个非参数模型,它有一个由用户提供的超参数K。非参数模型乍一看可能是一个明显的选择,因为,

它们不对数据的分布做任何先验假设。例如,在普通线性回归中,它是一个参数模型,我们假设Y(因变量)在给定X(特征)的条件下服从高斯分布,其均值是特征的线性组合(其中权重是θ)和方差等于σ²

  1. 条件分布Y给定X和参数θ 是一个正态分布,我们希望从X中捕捉均值。常量方差是* 同方差假设 的结果。

这可能并不总是成立,因为,

对于每个测试样本,他们需要将整个训练数据保存在内存中,这对 KNN 模型也是适用的。对于每个样本,我们需要计算它与每个训练样本的距离,因此我们需要检索/存储每个样本在内存中,这对于大型数据集甚至特征数量众多的小型数据集可能不可行。

非参数模型的基本思想是从数据中获取一些有用的见解,并用来解决给定的问题,而不通过可调参数对数据进行编码。

接下来,我们专注于核函数,它们在机器学习中有不同的使用场景,并且在每个上下文中稍有不同的含义。到目前为止,通过对这个博客的研究,以及我之前对核函数整体理解的尝试,我觉得核函数是提供给定数据点邻居信息的机器(作为输入提供给机器)。这些局部信息,即在考虑的数据点周围的邻近数据点的信息,然后用于解决给定的问题。一旦我们对每个数据点使用核函数,我们就能清楚地看到数据局部的情况

我们将探讨核函数的这三个方面,它们是机器学习中具有主要应用的三个不同概念,

  • 密度核函数

  • Mercer 核函数

  • 图像处理中的核函数

密度核函数:用于密度估计的核函数

密度核函数、核密度估计、核回归

我们可以使用核函数通过用训练样本建模基础概率分布来估计给定测试样本的概率密度。‘测试’样本和‘训练’样本分别指未观测和已观测的样本,考虑到机器学习的术语。

对于连续随机变量X,我们可以在适当的范围内积分X的概率密度函数,比如从x_1x_2,从而得到X在范围***[ x_1 , x_2 ]***内取值的概率。如果你对概率密度或随机变量的主题不太熟悉,这里是我关于概率分布的三部分系列,

密度核函数和核密度估计(KDE)

让我们从一个问题开始讨论。Panchal 博士住在一个拥挤的城市街区,四周都是房子。当地警方雇佣了一名侦探,其工作是确定博士家中居住的人数或其家属人数,以确保一切顺利。侦探不能按博士的门铃询问有多少家庭成员,因为这会警告博士如果有什么可疑的情况。

侦探会从 Panchal 博士房子的相邻房子开始询问,因为这些房子可以清楚地看到里面的情况。预计侦探会给予这些直接邻居的信息更高的权重/重要性。接下来,为了获得更多见解,侦探会询问那些稍微远离但可能对邻居有良好信息的房子。对于这些邻居提供的信息,侦探会给予较低的重要性,因为这些邻居的观察可能不如直接邻居(即邻近 Panchal 博士的房子)的观察准确。侦探会进行几轮这样的询问,逐渐减少重要性,远离 Panchal 博士的房子。

密度核函数类似于捕捉邻近点的信息。如果我们有一个数据集D,其中有N个样本,每个样本是一个实数,

上述代码片段中的核函数是一个 Epanechnikov(抛物线型)核函数。该核函数在这里具有一些特殊性质,

  • 性质 1:核函数或侦探不在意 x 或某些邻居的房子位于哪个方向。来自右边两栋房子或左边两栋房子的获得的信息是相同的。

  • 性质 2:核函数表示一个有效的概率密度函数(PDF),并且在整个实数域上积分为 1。

  • 性质 3:核的支持是所有值u的集合,使得***K(u)***不等于 0。它表示侦探在从哪里收集信息时会给予一些非零的重要性。如果侦探决定在半径 5 公里内询问所有房屋,那么支持就是这个 5 公里圆圈内的所有房屋。

每种类型的核函数都会执行类似的任务来编码邻近信息,每种核函数会有不同的策略来实现这一点。与我们的侦探不同,他在离开 Panchal 博士的房子时逐渐减少了对询问的重视(高斯核会这样做),另一个侦探可能会继续对所有询问赋予相同的重要性,忽略到一定程度的距离(均匀核)。想象一下,从我们的数据集D来看,所有x_i的分布是,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

需要估计其概率密度的类似高斯分布

我们的目标是创建对 X 的概率分布的估计。我们通过在每个样本 x_i 处估计密度并使用核来收集邻近信息来实现这一目标。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 KDE 估计概率密度

如果 x_ix 较远,则 | x — x_i | 将有更大的值,从而使 K( x — x_i ) 的值非常小,并减少 x_i 在确定 x 处的概率密度中的 作用。参数 h 是称为 带宽平滑参数h 的值越大,预测的概率密度越平滑。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过改变核的带宽获得的概率密度估计。最底部的图描绘了数据分布,通过增加核的带宽我们获得了更平滑的密度估计。这里用于估计的核是 Epanechnikov/Parabolic 核。

核回归

核回归是线性回归模型的非参数版本,我们在其中对结果变量的条件期望进行建模。在简单线性回归的情况下,我们通过将其表示为自变量的线性组合来直接建模条件期望 E[ Y | X ]。这产生了一个判别模型,而核回归是一个生成模型,因为我们通过核密度估计建模联合概率分布 P( X , Y )P( X )

推导一个没有额外参数的 E[ Y | X ] 估计量。在简单线性回归的情况下,E[ Y | X ] 将被建模为所有 X_i 的加权线性组合,其中权重是参数。

观察结果表达式时,你会发现预测结果 y_hat 是所有 y_i 的加权组合,其中权重由所有 x_i 的核函数值决定。

梅瑟核:高维空间中的点积

梅瑟核和正定性,梅瑟核在 SVM 中的应用

梅瑟核或正定核是将两个输入作为输入并产生一个实数的函数,该实数表征了这两个输入(或它们的高维表示)在某个其他空间中的接近度。事实证明,这些核在计算角度上很有用,因为它们帮助我们在高维空间中计算向量的点积,而无需显式地进行任何变换将我们的向量带入该高维空间。

梅瑟核

让我们通过定义核函数及其一些属性来开始讨论,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. Mercer 核是一个函数,它接受来自数据集D的两个数据点,并输出一个实数,表示这两个数据点在特征空间中的接近程度。

  2. 如果我们在数据集D中有n个数据点,并对每对数据点应用 Mercer 核,并将结果输出整理成一个矩阵,我们会得到一个正定矩阵。这个矩阵描绘了数据点之间的相似性,称为 Gram 矩阵。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Gram 矩阵

正定矩阵因其谱属性而独特。它们具有正特征值,并且相应的特征向量形成一个正交规范基。对于 Mercer 核,我们有一个特殊的属性,可以使用该属性将核函数的值表示为两个转换向量的点积。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Gram 矩阵的每个条目可以描述为两个转换样本之间的点积。

可能会有一种直觉上的冲动去理解这个陈述,但它存在于 Hilbert 空间的神圣领域,需要另写一篇博客。目前,了解核函数的值可以用高维空间中两个向量的点积来描述,这是很好的。

Mercer 核提供了一种计算这两个高维向量之间点积的快捷方式,而无需显式计算这些向量。因此,我们可以利用高维空间的优势,这在机器学习中有时是有用的,特别是当样本不线性可分时。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在低维空间中线性不可分的样本可能会在高维空间中找到一个最优的超平面。来源:作者图片

对于一些优化问题,如优化 SVM 时遇到的问题,我们需要计算两个高维向量之间的点积。使用核函数可以帮助我们轻松计算这个点积,而不需要对样本进行任何显式的转换。

Mercer 核在 SVM 中的应用

SVM 是线性分类器,它通过拟合一个超平面,使得在两个类别的样本之间形成一个决策边界。为了确定最佳的超平面,即将样本划分为两个类别并最大化“边际”的超平面,我们需要解决一个包含目标函数(一个可以最大化或最小化的函数)以及一些约束条件的优化问题。

SVM 优化问题的推导在这些博客中得到了广泛的讨论,Saptashwa Bhattacharyya的博客可以帮助我们进一步了解,

## 理解支持向量机:第二部分:核技巧;Mercer 定理

为什么使用核函数?

towardsdatascience.com

向量wb描述了形成决策边界的超平面。支持向量之间的边际/宽度由下述第一个表达式给出。此外,我们会匹配 SVM 做出的预测与目标标签,更确切地说,就是w.xi + byi的符号。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们必须解决的优化问题是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SVM 优化问题

我们通过拉格朗日乘数来解决这个优化问题,因此第一步是构建一个拉格朗日函数,并将其参数的偏导数设置为零。这将得到一个w的表达式,能够最小化拉格朗日函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将拉格朗日函数的偏导数设置为零。

将这些结果代入拉格朗日函数后,我们得到一个清晰描述核函数作用的表达式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了实现最佳超平面,我们需要计算数据集中样本对之间的点积。在某些情况下,找到一个最佳超平面是不可行的,因为样本可能不是线性可分的,即样本不能仅通过绘制一条线/平面来分成两个类别。我们可以通过增加样本的维度来发现一个分离超平面。

考虑一个特征映射ϕ,它将数据样本x转换为更高维度的特征,即ϕ(x)。在 SVM 的拉格朗日函数中,如果我们使用这些特征代替数据样本,我们需要计算

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以用一个核函数来替代特征的点积,该核函数对两个数据样本进行操作(而不是转换后的特征)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这种技术被广泛称为核技巧,是 Mercer 定理的直接结果。我们能够计算两个高维特征的点积,而无需显式地将数据样本转换到那个高维空间。随着维度的增加,我们在确定最佳超平面时具有更大的自由度。通过选择不同的核函数,可以控制特征所在空间的维度。

核函数具有更简单的表达式,如下所示,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

卷积的核: 图像处理

用于卷积和图像处理的核

核是固定大小的矩阵,用于在图像或特征图上卷积,以提取有用的信息。在图像处理中,核矩阵也称为卷积矩阵,用于对图像进行操作。每个核都有自己特定的操作,这在卷积后会改变图像。

卷积与核

卷积是一个数学算子,它接受两个函数并生成另一个函数。如果我们对两个函数或信号进行卷积,那么卷积的结果是一个表示两个函数之间重叠区域的函数。从数学上讲,卷积操作被定义为,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

描述卷积操作的动画图,以及它的数学定义。这类似于在密度估计中进行的“核滑动”。我们将核滑过数据分布,收集“邻域信息”,然后在特定点估计密度。来源: 维基百科 — 卷积 (维基共享资源)CC BY-SA 3.0

注意函数g在图上经过x = 0处墙壁时的卷积结果。结果突然变化并开始增加,这是由于x = 0周围邻域信息的变化。函数g,类似于我们在密度估计中研究的核,能够对核影响区域发生的变化做出反应。

从离散的角度来看,卷积操作是通过将核函数滑动到信号上,乘以信号和核的对应值,然后将所有这些乘积的总和放置到结果信号中来完成的。在数学意义上,考虑到离散信号的求和要比考虑连续信号上的积分更为合适。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对一维离散信号执行卷积操作。上面的表达式显示了相同的数学公式。图像来源: 神经网络中的一维卷积 — Brandon Rohrer(创作共用许可证) — CC0 1.0 Universal

对于图像,我们将一个二维核滑动到给定的图像上并执行相同的操作。这里,核的运动将是二维的,与在一维信号上进行的一维(单向)核运动相对。输出将是一个矩阵,因为卷积操作也是在二维输入上执行的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用内核矩阵进行卷积。来源:卷积 — 维基百科(创作共用许可证)— CC BY-SA 3.0

我们可以使用不同的内核从输入中提取各种特征或增强图像以进行进一步操作。例如,锐化内核会锐化图像中的边缘。许多其他内核在卷积过程中从图像中提取有趣的特征。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用不同的内核在图像处理中执行卷积。来源:作者提供的图片

CNN 中的内核

我们刚刚看到的内核是常量,但如果我们可以对内核进行参数化并控制提取哪些特征呢?这在卷积神经网络中会很有用,因为我们微调内核以最小化 NN 产生的整体损失。基于内核的非参数模型的概念在这里会减少,因为 CNN 可以拥有大量参数,但邻域信息提取的基本概念仍然有效。

这里的内核功能类似于锐化或 Sobel X 内核,但它将矩阵中的值视为参数,而不是固定的数字。这些可训练的内核通过反向传播进行优化,以减少 CNN 中的损失值。一个卷积层可以有许多这样的内核,统称为滤波器。

## 不,内核和滤波器并不相同

解决常见的混淆问题。

towardsdatascience.com 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个典型的卷积神经网络,包括最大池化和线性(全连接)层。卷积层和最大池化层从输入图像中提取特征,然后将这些特征传递给线性层。来源:作者提供的图片

第一个卷积层产生的输出传递到下一个层。这创建了一个分层特征提取过程,其中图像的低级特征由初始卷积层提取,高级特征则由最后的卷积层跟踪。这样的卷积堆栈与可训练的内核结合,使 CNN 能够以极高的精度识别图像中的物体,为现代计算机视觉开辟了新的领域。

结束

我希望这段关于内核世界的旅程能让你对这一概念感到着迷。内核在各种话题中经常引起混淆,但其核心思想始终如一,我们在博客中多次提到的就是邻域特征提取。与其使用参数捕捉数据中的模式,内核函数可以编码样本的相对接近度,从而捕捉数据中的趋势。然而,必须理解参数模型有其自身的优势,它们的使用并未过时。大多数神经网络模型是庞大的参数模型,具有数百万个参数,可以解决复杂的问题,如物体检测、图像分类、语音合成等。

除非另有说明,所有图像均由作者提供。

了解你的受众:技术演示准备指南

原文:towardsdatascience.com/know-your-audience-a-guide-to-preparing-for-technical-presentations-1a83fdb21050

一种结构化的方法来创建符合利益相关者需求和关注点的地址

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 John Lenehan

·发布在Towards Data Science ·9 分钟阅读·2023 年 10 月 6 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由Wan San Yip拍摄,发布在Unsplash

将复杂话题有效地呈现给组织的能力是明显将数据专业人士与其他人区分开的技能。在处理复杂话题时,提炼复杂信息为清晰的解释至关重要,而这一努力的成功取决于弥合复杂性与理解之间的差距。这一点在讨论数据科学中的难题时尤为重要,例如深度学习算法、贝叶斯推断和降维(仅举几例)。

本文是关于准备演示材料系列中的第一篇文章,其中我将介绍我在创建演示文稿时用来将高层次主题转化为简单总结的策略和技巧。本系列将详细介绍我在考虑如何将演示文稿结构化以使其清晰、简洁和有效时所使用的各种方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由Kristina Paparo拍摄,发布在Unsplash

我在这一系列中的建议可以分解为 3 个简单的原则,我在下面列出了这些原则:

  1. 了解你的受众

  2. 引导你的受众

  3. 预期并准备回应

所有这些要点都是相互关联和相互依赖的——成功的演讲将结合所有三个要点,使观众能够理解你的关键信息,获取与他们相关的信息,并以令人满意的方式回答他们的问题和关切。掌握这三个关键指南,你可以确保技术演讲的成功。

在这篇文章中,我将重点讨论第一个指南——如何对你的观众有足够的理解,以便能够衡量他们的关键关切、对当前话题的基本了解水平以及对你即将进行的演讲的期望。这种准备水平在处理由不同动机的不同利益相关者组成的大型观众时是至关重要的,同时还要有效地传达复杂的源材料。

了解你的观众

在他关于军事战略的著名论文中,中国将军孙子写道:

如果你了解敌人并了解自己,你不必担心百战百胜的结果。

自然地,你的观众不是你的敌人(希望如此),但关键前提仍然相同——提前充分了解你的观众将使你能够充分准备你的演讲,应对可能出现的各种情况。考虑到这一点,我想提出一些理解观众需求的提示和技巧,以便在演讲前做好准备。

绘制图示

在准备演讲时,考虑一下谁将听这个演讲——你的观众的主要背景是什么?他们是该领域的专家,还是仅仅对材料有一个表面的了解?这个人群对项目的内部运作感兴趣,还是更关注结果而不太关注细节?这个观众群体是否包括组织中的高级决策者?

为了系统地回答这些问题,我喜欢应用广泛领域中使用的利益相关者管理技术——利益相关者矩阵和影响-兴趣网格。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Miguel Henriques拍摄的照片,来源于Unsplash

首先定义什么是利益相关者——利益相关者是对项目或企业有影响的人(个人或团体)。在演讲的背景下,项目就是演讲本身——因此,利益相关者是任何对演讲结果有贡献或受到影响的人。这些人可以从直接处理演讲中显示的数据的数据分析师,到基于演讲建议做出决策的高管——识别所有可能受项目影响的个人或方是重要的,以便你可以在利益相关者矩阵中捕捉所有相关的关切。

利益相关者矩阵是一种相对简单的方法,用于绘制你关键听众的兴趣。它是一张描述每个利益相关者的关键关切、影响力和兴趣水平的表格,基本上绘制了他们在当前话题上的位置,以及他们在这一领域的影响力和兴趣。这在决定演讲方式和如何最佳展示信息时非常有用。

举例来说,假设你要在一个大型工厂内讲解工具利用趋势——最可能的听众将来自生产部门、质量控制、维护与设施、财务和高级管理层。你为这样的演讲准备的利益相关者矩阵可能如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

工具利用利益相关者矩阵(图片来源:作者)

一旦你草拟了利益相关者矩阵,并且对你的受众有了满意的理解,你现在可以将这些信息映射到影响-兴趣矩阵上,以获得每个利益相关者在当前话题上的视觉表示。

影响-兴趣矩阵是规划哪些利益相关者需要定制演示文稿的有效方法——右上角的利益相关者最为重要,需要紧密管理,而图表左下角的利益相关者则只需监控。下图很好地解释了这个概念:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

空白兴趣-影响矩阵示例(图片来源:作者)

对于这个工具利用的例子,兴趣-影响矩阵看起来如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

工具利用兴趣-影响矩阵(图片来源:作者)

根据上面的矩阵,你会得出结论:生产、质量和工厂管理是你在演讲时最重要的对象——然而,工厂管理的影响力较高,但对这个话题的兴趣不如生产或质量。财务在矩阵中的排名非常低,因此你不应该花太多时间考虑他们的兴趣。设施的影响力低但兴趣高——因为你需要他们的帮助来执行演示中做出的任何决定,保持他们的支持很重要。

考虑背景

现在你已经准备好了利益相关者分析,考虑一下你受众的最迫切关切是什么——确保在演讲时解决这些问题。了解你的演示目的,以便确定传达信息时应使用什么语调——你是在通知、说服还是教育你的听众?每一个目标都会导致对话题的略有不同的方法:

  1. 通知——在传达过程中保持客观,遵循数据,优先考虑清晰性和准确性,避免得出具体结论

  2. 说服——使用更多主观语言,用数据和统计支持你的主张,展示为什么这种观点相对于其他观点更为优秀。

  3. 教育——详细解释术语,优先考虑简洁明了的表达,使用类比或隐喻来解释难以理解的概念。

继续以工具利用率的例子为例,假设背景是工厂中的工具利用率低——你的演讲目的是向利益相关者通报这一问题,并展示追踪这一问题的指标?还是说服工具所有者更有效地使用他们的工具?或者是教育工程团队保持高工具利用率的最佳实践?考虑这些问题并将其纳入利益相关者分析,以确保你的演讲传达出适当的语气和信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由Campaign Creators提供,来源于Unsplash

其次,注意你被分配的演讲时间——这将决定你在讲解时能够深入的细节。如果你有一小时的时间,那么应力求在这一小时内讲解重要细节并根据需要详细阐述。然而,如果你只能讲解 5 或 10 分钟,则必须坚持最相关的细节,立即而彻底地解决最重要的点。如果时间紧迫,不要重复旧内容——而是声明这些细节在其他论坛中已经讨论过(如有要求提供相关材料),然后转向最新的信息。

最后,准备材料时考虑观众的基础理解水平非常重要——避免花费过多时间在众所周知的点上,而应略过这些点,优先介绍对讨论更相关的新颖和有影响力的信息。问自己,这些信息是否能带来新的或重要的收获——如果是的话,那么在幻灯片中优先考虑这些信息。

相应地调整你的语言。

通常,选择一种语气并在整个演讲中坚持使用并不简单——你演讲中的每个点可能需要调整语气和方法,以实现预期的效果。在演讲的某些部分,你可能会向观众提供统计数据——在描述其他细节时,你可能会转为更具指导性的语气,以确保在继续之前这些概念得到良好理解。你可能会短暂转为说服性语气,来论证更具争议的观点,然后再返回信息性立场,讲解更多公认的声明。

将这一切结合在我们之前的类比中——在准备你的利益相关者矩阵并将其映射到影响-兴趣网格上时,你知道生产、质量和高级管理层是这次演示中最重要的利益相关者。维护部门也非常感兴趣,但他们的权力不如这些小组。财务在影响-兴趣网格上优先级较低,不值得过多考虑。

生产部门希望工具能够尽可能高效运行以最大化产出,而质量部门希望工具能够尽可能精确运行,以最小化产品中的潜在缺陷。高级管理层关心这两种结果,他们的目标是从工厂中输出大量高质量的产品。假设你的最终目标是提高工厂的使用率——根据这些信息,你需要准备哪些数据,以及你需要使用什么语气,以确保这次演示成功?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由Reimond de Zuñiga拍摄,来源于Unsplash

由于这个假设情境中的问题最终归结为产量与质量,因此这些是你在演讲中应重点强调的要点——准备数据以显示使用率的提高不会导致负面的质量影响。你将通知关键利益相关者这些机会(特别是生产和工厂管理层),并教育维护部门如何提高这些工具的使用率。

在使用率增加可能对质量产生影响的情况下,你的讲话语言必须变得更加有说服力,以说服质量部门在工具精度上做出让步。准备量化产量与质量影响之间权衡的数据,并确定这两个指标之间的最佳平衡点,以实现工厂中最高质量产品的最大产量。这将吸引工厂管理层,同时旨在安抚质量部门。很可能,质量部门会希望详细审查这一分析——为此准备支持材料。详细描述这点将使人明确你进行了彻底的分析,并应消除对你评估质量的任何疑虑。

结论

总结来说,了解你的听众是准备复杂主题高级演讲的一个关键方面。通过了解利益相关者的兴趣和影响力水平,可以制定针对性的消息,使其与听众产生共鸣,并最终在决策后产生影响。此外,策略性地使用语调增添了另一个层次的深度,塑造了利益相关者对材料的认知和参与度。当这些技巧在演讲中无缝整合时,演讲便成为了捕获听众注意力的高效工具,从而导致更成功和有影响力的结果。

知识图谱嵌入基础

原文:towardsdatascience.com/knowledge-graph-embeddings-101-2cc1ca5db44f?source=collection_archive---------1-----------------------#2023-04-09

知识图谱嵌入(KGE)算法的总结

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Amine Dadoun

·

关注 发表在 Towards Data Science ·7 分钟阅读·2023 年 4 月 9 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源。该图片根据 Pixabay 的内容许可可以自由使用。

在我们最新的一篇系列文章中,*如何基于图设计推荐系统?*我们介绍了一种新兴的推荐系统算法类别,即基于知识图谱的推荐系统。这些系统利用知识图谱的语义结构和知识图谱嵌入(KGE)算法的强大能力,为用户提供更精准的产品推荐。

什么是知识图谱嵌入?

前一篇文章所述,知识图谱(KG)在表示结构化数据和整合来自不同来源的数据方面非常有效。然而,知识图谱三元组的符号化特性通常使得知识图谱在机器学习应用中难以操作。

知识图谱嵌入(KGE)是将 KG 元素表示为连续向量空间的一种表示方法。学习这些嵌入的目标是简化图元素(实体、关系)的操作,以用于预测任务,例如实体分类、链接预测或推荐系统。

大多数提出的方法仅依赖于图三元组,目的是将 KG 实体和关系嵌入到连续的向量空间中。这个想法是保留 KG 的固有结构并简化 KG 元素的使用。一旦 KG 元素被表示为嵌入,就使用评分函数来测量三元组的合理性(例如‘George’,‘是 A’,‘Person’)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图展示了节点和关系在二维向量空间中的嵌入表示。图片来源:docs.ampligraph.org/en/1.1.0/。Ampligraph 是一个免费的开源 Python 库,用于知识图谱嵌入。版权所有 AmpliGraph,许可证为 Apache 2.0。

受词嵌入启发

嵌入技术因 2013 年发布的 Word2vec [1] 而变得流行。Word2vec 通过训练一个浅层神经网络来预测词汇表中一个词的上下文,从而高效地学习词嵌入,关键思想是保留词的语义。图下所示的两种不同架构分别是 Continuous Bag-of-Words [2] (CBOW),它实现了一个神经网络,其中输入是上下文词 wₜ₋ᵢ ,wₜ₋ᵢ₊₁ …wₜ₊ᵢ₋₁,wₜ₊ᵢ,而输出是预测的目标词 wₜ;另一个是 Skip-Gram [1],它实现了一个两层神经网络,其中输入是目标词 wₜ,输出是上下文词。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CBOW 架构基于上下文预测当前词,而 Skip-gram 模型给定当前词预测周围词。图片来源:Mikolov et al.

按照相同的逻辑,DeepWalk [3] 和 node2vec [4] 的作者通过建议使用神经语言模型如 Word2vec 来构建图嵌入,将嵌入扩展到图中。在 DeepWalk 中,作者提出通过依赖图中的随机均匀游走来提取图中的节点序列——这些节点代表实体。这个节点序列可以看作是文本,然后应用 CBOW 或 SkipGram 来构建这些节点的嵌入。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DeepWalk 旨在在嵌入空间中保持图的局部结构。图像来源:Bryan Perozzi, Rami Al-Rfou, Steven Skiena

Node2vec 通过引入更复杂的随机游走策略进一步改进,这种策略可以更容易地适应多样的图连接模式,在链接预测和知识图谱补全任务中优于 DeepWalk。

利用知识图谱的属性

仅考虑图结构以编码 KG 元素仍然不够,因此出现了其他方法,也考虑图的属性和实体类型。在 [5] 中,作者将知识图谱嵌入算法分为两大类,即基于评分函数的转换距离模型,通过在向量空间中测量距离来评估三元组的可信度,通常是在执行转换操作后,以及基于相似度评分函数的语义匹配模型,通过匹配实体和关系的潜在表示的语义来评估三元组的可信度。

转换距离模型

对于第一类,TransE [6] 通常被提及为最常用的转换距离模型。TransE 在相同的空间 Rₘ 中表示实体和关系向量。给定一个三元组 (s,p,o),关系被解释为一个转换向量 r,使得嵌入的实体 s(主体)和 o(客体)可以通过 p 以低误差连接,即,当三元组 (s,p,o) 在知识图谱中成立时,s + p ≈ o。换句话说,目标是最小化下面表示的评分函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TransH [6] 引入了关系特定的超平面,每个属性 p 在超平面上由其法向量 wₚ 表示。TransR [8] 采用了与 TransH 相同的思路,但不是将关系投影到超平面中,而是建议为每个关系创建一个特定的空间。下图表示了上述不同的转换距离模型的嵌入空间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于 TransE,无论关系如何,嵌入之间的距离都在相同的嵌入空间中计算,而对于 TransH 和 TransR,它们在关系特定的空间中计算。(h, r, t) 是 KG 中的一个三元组。图像来源:Wang et al.

语义匹配模型

另一方面,语义匹配模型利用基于相似度的评分函数。在 [9] 中,作者提出了 RESCAL,这是一种将每个实体与一个向量关联起来以捕捉其潜在语义的模型。每个关系被表示为一个矩阵,模型化潜在因素之间的配对交互。三元组 (s, p, o) 的得分由一个双线性评分函数定义,通过基于 ALS 优化技术的张量分解来最小化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

RESCAL 方法的张量嵌入。图片来源:Bhattarai 等

扩展 RESCAL 的其他方法出现了。NTN [10](神经张量网络)是一种通过非线性层学习表示的神经网络。ER-MLP(多层感知器),其中每个关系(以及实体)都与一个向量关联。更具体地说,给定一个三元组 (s, p, o),s、p 和 o 的向量嵌入在输入层中连接,并映射到一个非线性隐藏层。

其他方法也出现了,比如 DistMul,它通过用对角矩阵表示关系来简化 RESCAL,从而减少其复杂性,ComplEX 扩展了 DistMul,使用复数代替实数。近年来,许多方法出现了,旨在简化现有文献并提高现有知识图谱(KG)任务的算法准确性,如链接预测任务。这些方法采用了各种技术,如基于神经网络的模型、基于分解的模型和基于随机游走的模型等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

KGE 算法的发展。图片来源:知识图谱嵌入

结论

总结来说,知识图谱嵌入算法已经成为表示和推理复杂结构化数据的强大工具。这些算法学习知识图谱中实体和关系的低维嵌入,从而允许高效地计算相似性和推理任务。

在这篇博客文章中,我们讨论了各种嵌入算法,包括 TransE、TransH、TransR、DistMult、ComplEx,并强调了它们的优缺点。总体而言,知识图谱嵌入算法在问答系统、推荐系统和自然语言处理等广泛应用中表现出巨大的潜力。随着领域的不断发展,我们可以期待看到更强大和有效的嵌入算法,它们能够处理越来越大和复杂的知识图谱。

在本系列的下一篇博客中,我们将介绍一些具体的推荐系统用例,其中 KGE 的使用有助于提高推荐准确性。

参考文献:

[1] Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, 和 Jeffrey Dean. 词汇和短语的分布式表征及其组合性。发表于第 26 届神经信息处理系统国际会议论文集——第 2 卷,NIPS’13,页码 3111–3119,美国纽约红钩,2013 年。Curran Associates Inc.

[2] Tomás Mikolov, Kai Chen, Greg Corrado, 和 Jeffrey Dean. 向量空间中词汇表征的高效估计。由 Yoshua Bengio 和 Yann LeCun 编辑,第 1 届国际学习表征会议,ICLR 2013,美国亚利桑那州斯科茨代尔,2013 年 5 月 2–4 日,研讨会论文集,2013 年。

[3] Bryan Perozzi, Rami Al-Rfou, 和 Steven Skiena. Deepwalk:社交表征的在线学习。发表于第 20 届 ACM SIGKDD 国际知识发现与数据挖掘会议论文集,页码 701–710,2014 年。

[4] Aditya Grover 和 Jure Leskovec. Node2vec:网络的可扩展特征学习。发表于第 22 届 ACM SIGKDD 国际知识发现与数据挖掘会议论文集,页码 855–864,美国纽约,2016 年。ACM 出版社。

[5] Nan Wang, Hongning Wang, Yiling Jia, 和 Yue Yin. 通过多任务学习解释性推荐于带有观点的文本数据。发表于第 41 届国际 ACM SIGIR 信息检索研究与发展会议,SIGIR ’18,页码 165–174,美国纽约,2018 年。计算机协会。

[6] Antoine Bordes, Nicolas Usunier, Alberto Garcia-Duran, Jason Weston, 和 Oksana Yakhnenko. 翻译嵌入用于建模多关系数据。由 C. J. C. Burges, L. Bottou, M. Welling, Z. Ghahramani, 和 K. Q. Weinberger 编辑,神经信息处理系统进展,第 26 卷,美国内华达州湖塔霍,2013 年。Curran Associates, Inc.

[7] Zhen Wang, Jianwen Zhang, Jianlin Feng, 和 Zheng Chen. 通过在超平面上转换进行知识图谱嵌入。发表于第二十八届 AAAI 人工智能会议论文集,AAAI’14,页码 1112–1119,加拿大魁北克市,2014 年。AAAI 出版社。

[8] Yankai Lin, Zhiyuan Liu, Maosong Sun, Yang Liu, 和 Xuan Zhu. 学习实体和关系嵌入以完成知识图谱。发表于第二十九届 AAAI 人工智能会议论文集,AAAI’15,页码 2181–2187,美国德克萨斯州奥斯汀,2015 年。AAAI 出版社。

[9] Maximilian Nickel, Volker Tresp, 和 Hans-Peter Kriegel. 一种用于多关系数据集体学习的三元模型。发表于第 28 届国际机器学习会议论文集,ICML’11,页码 809–816,美国威斯康星州麦迪逊,2011 年。Omnipress 出版社。

[10] Richard Socher, Danqi Chen, Christopher D Manning, 和 Andrew Ng. 使用神经张量网络进行知识库补全推理。由 C. J. C. Burges, L. Bottou, M. Welling, Z. Ghahramani, 和 K. Q. Weinberger 编辑,神经信息处理系统进展,第 26 卷,美国内华达州湖塔霍,2013 年。Curran Associates, Inc.

知识图谱转换器:构建动态推理以适应不断演变的知识

原文:towardsdatascience.com/knowledge-graph-transformers-architecting-dynamic-reasoning-for-evolving-knowledge-712e056725e0

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Anthony Alcaraz

·发布在 Towards Data Science ·阅读时间 7 分钟·2023 年 10 月 28 日

人工智能软件用于提升本文文本的语法、流畅性和可读性。

知识图谱通过将事实表示为相互连接的实体,已成为增强 AI 系统的一种关键技术,具备整合和上下文化知识的能力。

然而,现实世界的知识不断演变,需要动态的表示方法来捕捉世界的流动和时间敏感的复杂性。

时序知识图谱(TKGs)通过引入时间维度来满足这一需求,每个关系都有一个时间戳标记其有效期。TKGs 允许不仅建模实体之间的连接,还可以建模这些关系的动态,从而为 AI 解锁新的潜力。

尽管时序知识图谱(TKGs)已引起了大量研究关注,但其在专业领域的应用仍然是一个未开发的前沿领域。特别是金融领域具有市场快速发展的特征和多层次的文本数据,这些都可能从动态知识图谱中显著受益。然而,缺乏高质量金融知识图谱的访问限制了该领域的进展。

针对这一空白,Xiaohui Victor Li(2023)介绍了一种创新的开源金融动态知识图谱(FinDKG),该图谱由一种名为知识图谱转换器(KGTransformer)的新型时序知识图谱学习模型驱动。

[## FinDKG/FinDKG_dataset at main · xiaohui-victor-li/FinDKG

数据和模型实现文献:FinDKG:结合大语言模型的全球金融动态知识图谱……

github.com [## 财务动态知识图谱

本网站提供了财务动态知识图谱(FinDKG)门户,驱动该门户的是图形 AI 模型 KGTransformer……

xiaohui-victor-li.github.io

FinDKG 由跨越二十多年的全球财务新闻语料库构建,将财务系统的定量指标和定性驱动因素封装到一个相互关联的时间框架中。作者展示了 FinDKG 在生成可操作的洞察力方面的实用性,例如风险监测和主题投资。

KGTransformer 模型旨在处理 TKGs 的复杂性,并在基准 TKG 数据集上表现优于现有的静态知识图谱模型。

该架构利用了最新的进展,如元关系建模、图注意网络和时间点过程,以实现强劲的结果。

通过访问开源资源,如 FinDKG、KGTransformer 以及经过微调的集成上下文知识图谱生成器(ICKG)模型,这项工作旨在推动知识图谱与金融交叉学科研究。

通过利用动态知识图谱生成细致的财务洞察,这项研究突显了将结构化知识注入数据驱动的金融和经济学中的有影响力的方向。

FinDKG 展示的能力突显了知识图谱在捕捉现实世界流动复杂性方面的强大力量。

Transformer(KGT)模型在各个行业中具有广泛的潜力。在供应链管理中,KGT 可以跟踪供应商表现,预测需求,并识别随时间变化的风险。

随着知识表示和推理作为人工智能的前沿领域,这项研究标志着向构建精通动态理解的智能系统迈出重要一步。

静态图网络的局限性

大多数现有的图神经网络设计用于静态图,不考虑时间动态。例如,图卷积网络(GCNs)和图注意网络(GATs)等模型从邻近节点聚合信息,而忽视了任何时间模式。

这种静态假设严重限制了它们在 TKGs 上的推理能力。不考虑时间上下文,使用静态嵌入做出的预测会随着图谱的演变迅速过时。

此外,静态模型将所有边缘视为均匀的,缺乏建模关系随时间变化的重要性或有效性的细微差别。它们的表示也仅限于直接邻居,缺乏更广泛的时间视角。

TKGs 需要能够理解时间相关的边重要性、随着关系和实体演变调整决策,并在考虑过去和未来影响的同时进行预测的模型。

让我们看看 KGTs 如何实现这一点。

引入知识图谱变换器

KGTs 展示了一种专门用于 TKG 动态学习的新架构范式。它们以创新的方式将图神经网络和变换器结合在一起。

从本质上讲,KGTs 包含归纳偏置,使其设计特别适合于基于 TKG 的推理。这些包括:

  • 明确的时间建模 以捕捉演变动态

  • 多关系处理 以表示异质关系

  • 连续实体跟踪 以实现时间适应性

  • 图级汇总 以实现更广泛的上下文

让我们深入了解 KGTs 如何实现这些能力:

明确的时间建模

KGTs 使用独立的实体和关系 RNN(递归神经网络)来建模节点嵌入的时间演变。

随着新事件被添加到 TKG 中,RNN 会更新嵌入以反映新的状态。这使得能够保持实体或关系随时间变化的表示。

RNN 还支持有序序列建模,其中时间t的嵌入依赖于先前的时间步——模拟现实世界的时间动态。

多关系处理

根据最近的多关系图网络进展,KGTs 采用特定于关系的参数来处理各种语义连接。

例如,“Employed_By”和“Friends_With”关系具有非常不同的含义,模型通过对每种关系类型使用不同的权重来捕捉这些差异。

这种细致的处理防止了过度泛化,并提高了预测质量。

连续实体跟踪

KGTs 不是在孤立的快照中处理 TKG,而是随着新事件的添加不断更新嵌入。

这使得能够平滑地跟踪实体,而不是在每个时间步重新初始化。结果的连续性保持了时间上下文,并使模型能够随着 TKG 的演变进行适应。

图级汇总

除了邻近节点状态,KGTs 还包含一个全局图嵌入,汇总了 TKG 在某一时刻的全部状态。

这提供了至关重要的时间上下文,并通过考虑新事件对超出立即受影响实体的广泛影响来改善预测。

图嵌入是通过对所有节点进行时间注意力机制计算的,从而实现自适应和高效的汇总。

架构组件

KGTs 由多个相互连接的组件组成,这些组件赋予了上述能力:

  • 输入层: 接受初始节点特征或嵌入。

  • 时间嵌入: 作为专门的嵌入,通过 RNN 编码时间演变的属性。

  • 结构嵌入: 通过邻居间的关注消息传递捕捉节点邻域和全局拓扑。

  • 位置编码: 提供了类似于变换器架构的绝对位置的时间感知。

  • 前馈层: 使用多层感知机实现更深层次的语义集成。

  • 输出层: 返回适合最终任务的节点嵌入或预测。

组件以分层架构堆叠,每个块进一步精炼和丰富嵌入。跳跃连接允许结合局部和全局视角。附加细节,如归一化层、丢弃和特定激活函数,将被纳入方程中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相对于现有方法的优势

KGTs 的独特架构属性使其相较于以往的最先进模型在时间图上的应用具有多重优势:

  • 泛化: KGTs 可以通过利用学习到的归纳偏差处理之前未见过的实体、关系和事件。相比之下,许多现有模型依赖于重新训练。

  • 推理: KGTs 学习的时间增强实体和图表示导致在时间图上的预测推理有所改善,超越了之前的模型。

  • 效率: 像图嵌入这样的机制避免了处理冗长的历史序列,从而提高了对大型 TKGs 的训练和推理效率。

  • 可解释性: 像关系特定参数和时间注意力这样的组件提供了对模型工作的洞察,提高了相较于黑箱模型的可解释性。

总的来说,KGTs 在时间知识图谱上的动态推理领域推进了最先进技术。他们强大的实证表现与架构透明度相结合,突出显示了它们作为建模复杂时间演变领域的强大而实际的解决方案的潜力。

应用领域广泛:

KGT 的引入在知识表示、推理和时间序列建模的交汇处激发了令人兴奋的机会——开辟了动态图学习的新领域。随着 TKGs 在实际应用中的不断扩展,KGTs 代表了赋予 AI 代理对其周围世界的时间理解的一个重要步骤。

本研究在使用动态知识图谱和专业学习技术推进演变中的现实系统建模方面取得了重大进展。通过引入开源金融知识图谱(FinDKG)和创新的知识图谱变换器(KGTransformer)模型,这项工作为该领域提供了实际工具和方法上的进步。

从全球金融新闻语料库创建 FinDKG 展示了构建领域特定动态知识图谱的可行性。

FinDKG 将金融系统的定性和定量方面封装在一个相互关联的时间框架中。所展示的用例,从风险监控到主题投资,突显了 FinDKG 在生成深刻见解方面的实用性。通过将 FinDKG 作为开源资源,进一步扩大了其应用潜力。

在方法论方面,KGTransformer 推动了动态知识图谱学习的最前沿。通过结合图注意力网络、元关系建模和时间点过程等架构元素,KGTransformer 在基准动态图数据集上表现出色。模型被证明优于那些不考虑时间上下文的现有静态知识图谱模型。引入关系特定参数和连续实体追踪等组件提供了更具表现力的表示,以处理不断演变的图谱。

本研究中提出的创新在知识表示、推理和时间序列建模的交汇处催生了无数可能性。

FinDKG、KGTransformer 和 ICKG 语言模型等开源资源的可用性为其他研究人员在此基础上进一步发展这些技术并扩展到新领域提供了肥沃的土壤。

一些有前景的方向包括:

  • 为像医疗、教育、交通等专业领域构建动态知识图谱,这些领域可以从时间推理中获益。

  • 利用最近在自监督学习和对比方法方面的进展来增强 KGTransformer 的能力,以进行图表示学习。

  • 将大型语言模型的优势与结构化知识图谱结合,形成一个集成推理框架。

  • 对图学习技术与传统时间序列模型在时间预测任务上的实证比较。

  • 对 KGTransformer 的架构改进,如引入变换器编码器或改进时间记忆。

通过利用变换器网络和结构化知识图谱的双重优势,本研究实现了对智能系统在现实世界中操作的丰富动态理解。

随着知识表示和时间推理仍然是开放领域,此处建立的基础工作为机器学习和符号 AI 的交汇处的有影响力创新提供了跳板。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者提供的图片

来自 Towards Data Science 编辑的备注: 尽管我们允许独立作者根据我们的 规则和指南**发布文章,但我们不对每位作者的贡献表示支持。您不应在未经专业建议的情况下依赖作者的作品。有关详细信息,请参见我们的 读者条款

知识图谱、硬件选择、Python 工作流程及其他十一月必读内容

原文:towardsdatascience.com/knowledge-graphs-hardware-choices-python-workflows-and-other-november-must-reads-dc892373a4c0?source=collection_archive---------5-----------------------#2023-11-30

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 TDS Editors

·

关注Towards Data Science 发布的 ·作为 Newsletter ·4 min read·Nov 30, 2023

我们正在进入另一个充满事件的数据和机器学习专业人士的精彩年度的最后阶段。在全球许多地方的假期季节正式开始之前,你们中的许多人正在做最后的努力学习新技能,跟上最近的研究,或者为下一步职业生涯做准备,确实是世界上许多地方真正开始了。

我们从 11 月份精选的必读文章涵盖了许多内容,并呼应了我们社区最近几周关注的话题和兴趣——从知识图谱的应用到简化求职流程。我们希望你在为即将到来的新年制定计划时,能探索这些优秀的文章。祝你阅读愉快!

热门帖子

如果你错过了,这里是我们过去一个月最受欢迎和分享的帖子。

  • 如何将任何文本转换为概念图了解如何使用 Mistral 7B 模型将任何文本语料库转化为知识图谱:Rahul Nayak的这本详细说明(且极为成功)的指南涵盖了整个过程。

  • Apple M2 Max GPU 与 Nvidia V100、P100 和 T4 的比较谁不喜欢一个扎实的硬件基准测试帖子?Fabrice Daniel花时间比较了 Apple Silicon M2 Max GPU 在训练 MLP、CNN 和 LSTM 模型时与 Nvidia V100、P100 和 T4 的性能。

  • 我如何在 6 个月内获得数据分析师职位从你需要掌握的基本技能到利用生成 AI 的创新方法,Natassha Selvaraj的最新贡献帮助求职者在日益竞争激烈的就业市场中变得更高效。

  • 用实际案例和 Python 代码解释隐马尔可夫模型如果你准备好卷起袖子,动手编写一些代码,Carolina Bento的这本通俗易懂的隐马尔可夫模型指南绝对值得一看。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Christine 提供,来源于 Unsplash

  • 用于可视化网络图的新最佳 Python 包在他首次 TDS 文章中,Benjamin Lee向我们介绍了 gravis 的内部工作原理,这是一款功能强大的开源网络图可视化包。

  • **从线性代数到深度学习的 7 本书(2023 年冬季更新)**不确定如何度过接下来几周的闲暇时间?Andreas Stöffelbauer整理的书单推荐是一个很好的资源,涵盖了统计学、神经网络等广泛话题。

  • 检索增强生成(RAG):从理论到 LangChain 实现检索增强生成在机器学习社区中继续引起轰动;如果你刚刚开始关注,Leonie Monigatti的入门指南是一个很好的起点:它涵盖了这一方法的基本原理,并提供了详细的实际实现。

值得关注的项目和话题引发者

如果你在寻找灵感或希望了解最新的讨论动态,这些推荐适合你。

  • 人类劳动如何促进机器学习人机协作的概念在Stephanie Kirmer最近的文章中获得了新的解读,重点关注“我们在机器学习中取得激动人心的进展时,依赖多少手动的人力工作。”

  • 在你的 WhatsApp 聊天中构建语言模型我们中的一些人可能把群聊视为一个有趣的分享表情包和动图的空间。Bernhard Pfann, CFA将其作为基于 GPT 的语言模型的基础。

  • 迷失在 DALL-E 3 的翻译中输入语言如何影响生成式 AI 文本到图像工具的输出,以及结果可以告诉我们关于模型内置偏见的什么?Yennie Jun的最新帖子详细探讨了这一关键话题。

  • 做这 5 件简单的事,让你的数据科学家简历从人群中脱颖而出从关注可测量的影响到具体的格式建议,Madison Hunter的成功简历构建指南是任何考虑在不久的将来换岗者的重要读物。

  • 我的生活统计数据:我追踪了我的习惯一年,这就是我学到的追踪自己每天的习惯一年需要大量的 dedication,这可能是为什么Pau Blasco i Roca’s 首篇文章引起了如此多读者的共鸣;即使你不打算开始类似的旅程,这也是一个关于收集和分析数据的 compelling 叙述。

我们最新一届的新作者

每个月,我们都很高兴看到一批新的作者加入 TDS,他们每个人都与我们的社区分享了自己独特的声音、知识和经验。如果你在寻找新的作家进行探索和关注,只需浏览我们最新加入的作者作品,包括ming gaoArmand SauzayMantek SinghZachary RaicikAngela K.Flavien BerwickCorné de RuijtBhaskara Govinal BadigerTy StephensNabil AlouaniTim RoseShubham AgarwalMert AtliTom GotsmanVincent VandenbusscheOnur Yuce Gun, PhDAhmed FessiRobert ConstableDavid R. WinerMarcin StaskoLuis MedinaHugo LuStijn GoossensSamuel ChaineauJimmy WeaverSummer HeMathieu LaversinMaksym PetyakSanil KhuranaCarlos J. UribeChris BruehlGurjinder KaurSergei SavvovOlivier RuasAndrew Skabar, PhDKaustubh BhavsarPau Blasco i RocaVictoria WalkerFraser BrownVictor MurciaJuan Jose MunozAveek GoswamiMatteo CiprianBenjamin LeeDima TimofeevPetru van der Walt FélixFrank WittkampfPaul LevchukEvgeniya SukhodolskayaRodrigo SilvaAlex ShaoJeremy ArancioLiz LiMichael AllenNoah HaglundAmy Ma等。

感谢你对我们作者工作的支持!如果你喜欢你在 TDS 上阅读的文章,可以考虑成为 Medium 的朋友会员:这是一个全新的会员等级,为你最喜欢的作者提供更丰厚的奖励,以奖励他们的优质写作。

直到下一个 Variable,

TDS 编辑们

知识检索占据了中心舞台

原文:towardsdatascience.com/knowledge-retrieval-takes-center-stage-183be733c6e8?source=collection_archive---------2-----------------------#2023-11-16

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源:Adobe Stock。

GenAI 架构从 RAG 转向解释性检索为中心的生成(RCG)模型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Gadi Singer

·

跟随 发表在 Towards Data Science ·13 分钟阅读·2023 年 11 月 16 日

要使 GenAI 从消费者向业务部署过渡,解决方案应主要围绕使用检索为中心的生成(RCG)所需的模型外部信息构建。

随着生成型人工智能(GenAI)开始在各行业部署,公司需要提供效率、准确性、安全性和可追溯性的模型。ChatGPT 等模型的原始架构显示出无法满足这些关键需求的主要差距。在早期的 GenAI 模型中,检索被用作事后补救,以解决依赖参数化内存中记忆信息的模型的缺点。当前的模型通过在解决方案平台上增强检索增强生成(RAG)前端已在此问题上取得显著进展,以允许提取模型外的信息。也许现在是进一步重新思考生成型人工智能架构的时候了,并且从 RAG 系统转向以检索为核心访问信息的检索中心生成(RCG)模型。

检索中心生成模型可定义为一种生成型人工智能解决方案,专为系统设计,其中绝大多数数据存储在模型参数化内存之外,并且在预训练或微调中大多数情况下并未见过。使用 RCG 时,GenAI 模型的主要角色是解释从公司索引数据语料库或其他策划内容中检索到的丰富信息。模型不是记忆数据,而是专注于对目标结构、关系和功能的精细调整。生成输出的数据质量预期达到 100%的准确性和及时性。适当解释和使用大量未在预训练中看到的数据要求模型更多地抽象化,并使用模式作为识别信息中复杂模式和关系的关键认知能力。这种检索要求与模式自动学习相结合,将推动大型语言模型的预训练和微调进一步演进。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1. 检索中心生成(RCG)与检索增强生成(RAG)的优势和挑战。图片来源:Intel Labs.

大幅减少在生成式人工智能模型中使用记忆中的数据,而是依赖可验证的索引源,将改善来源,并在提升准确性和性能方面发挥重要作用。到目前为止,生成式人工智能架构中的普遍假设是模型中的数据越多越好。基于这一目前主流的结构,预计大多数标记和概念已被吸收和交叉映射,以便模型可以从其参数记忆中生成更好的答案。然而,在常见的商业场景中,生成输出所用的大部分数据预计来自检索的输入。我们现在观察到,模型中有更多数据而依赖检索知识会导致信息冲突,或包括无法追溯或验证其来源的数据。正如我在上一篇博客中概述的,适者生存,设计为使用 RCG 的小型灵活目标模型不需要在参数记忆中存储大量数据。

在数据主要来自检索的商业环境中,目标系统需要在解释未见相关信息以满足公司要求方面表现出色。此外,大型向量数据库的普及和上下文窗口大小的增加(例如,OpenAI 最近将GPT-4 Turbo 的上下文窗口从 32K 增加到 128K)正在推动模型向推理和解释未见复杂数据的方向发展。现在,模型需要智能化地将广泛的数据转化为有效的知识,通过结合复杂的检索和微调来实现。随着模型变得以检索为中心,创建和利用模式的认知能力将成为焦点。

消费者与商业使用的生成式人工智能

在经历了十年的人工智能模型规模和复杂度的快速增长后,2023 年标志着一个关注效率和生成式人工智能有针对性应用的转变。从消费者焦点转向业务使用是推动这种变化的关键因素之一,涉及三个层面:数据质量、数据来源和目标用途。

数据质量: 在为公司生成内容和分析时,95%的准确性是不够的。企业需要接近或达到完全准确。为了确保输出质量,需要对特定任务进行高性能的微调,并管理所用数据的质量。此外,数据需要可追溯和可验证。来源很重要,而检索对于确定内容来源至关重要。

  • 数据来源: 期望在商业应用程序中的绝大多数数据都是从可信的外部来源以及专有的业务/企业数据中策划出来的,包括产品信息、资源、客户、供应链、内部操作等等。检索对于访问未在模型中预先训练的最新和最广泛的专有数据至关重要。无论模型大小如何,当使用来自其内部存储器的数据与从业务来源提取的可验证、可追溯数据时,数据的来源都可能存在问题。如果数据有冲突,可能会使模型混淆。

  • 目标用途: 公司模型的构造和功能往往专门用于一组用途和数据类型。当 GenAI 功能部署在特定的工作流程或业务应用程序中时,不太可能需要全能功能。由于数据主要来自检索,因此目标系统需要在解释公司特定方式所需的相关信息方面表现出色,这些信息对模型来说是看不见的。

例如,如果一个金融或医疗公司追求 GenAI 模型来改善其服务,它将专注于一系列用于其预期用途所需的函数族。他们可以选择从头开始预训练一个模型,并尝试包含所有他们的专有信息。然而,这样的努力可能会非常昂贵,需要深厚的专业知识,并且很可能随着技术的发展和公司数据的不断变化而迅速落后。此外,它无论如何都需要依赖检索来访问最新的具体信息。更有效的路径是采用现有的预训练基础模型(例如Meta 的 Llama 2)并通过微调和索引来定制它以用于检索。微调只使用了信息和任务的一小部分来改进模型的行为,但广泛的业务专有信息本身可以被索引,并根据需要进行检索。随着基础模型更新到最新的 GenAI 技术,刷新目标模型应该是一个相对简单的过程,只需重复微调流程。

转向以检索为中心的生成:围绕索引信息提取进行架构设计

Meta AI 及其大学合作伙伴在 2021 年引入了检索增强生成(RAG),以解决 LLMs 中的来源和更新世界知识的问题。研究人员使用 RAG 作为一种通用方法,将非参数记忆添加到经过预训练的参数记忆生成模型中。非参数记忆使用由预训练检索器访问的 Wikipedia 密集向量索引。在一个数据记忆较少的紧凑模型中,非常重视由向量数据库引用的索引数据的广度和质量,因为模型不能依赖于记忆信息来满足业务需求。RAG 和 RCG 都可以使用相同的检索器方法,通过在推理时实时提取相关知识(见图 2)。它们在 GenAI 系统放置信息的方式以及对以前未见数据的解释期望上存在差异。在 RAG 中,模型本身是主要的信息来源,检索到的数据作为辅助。而在 RCG 中,大部分数据存在于模型的参数记忆之外,使得解释未见数据成为模型的主要角色。

需要注意的是,目前许多 RAG 解决方案依赖于诸如LangChainHaystack等流程,将前端检索与独立的向量存储连接到一个未经过检索预训练的 GenAI 模型。这些解决方案提供了一个用于索引数据源、选择模型和模型行为训练的环境。其他方法,如Google Research 的 REALM,则尝试通过集成检索进行端到端的预训练。目前,OpenAI 正在优化其检索 GenAI 路径,而不是让生态系统为 ChatGPT 创建流程。该公司最近发布了Assistants API,该 API 可以检索模型外的专有领域数据、产品信息或用户文档。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2. RCG 和 RAG 在推理过程中检索公共和私人数据,但它们在如何放置和解释未见数据方面存在差异。图像来源:Intel Labs。

在其他例子中,像 Intel Labs 的 fastRAG 这样的快速检索模型使用预训练的小型基础模型从知识库中提取请求的信息,而无需额外训练,提供了更可持续的解决方案。fastRAG 作为开源 Haystack GenAI 框架的扩展,使用 检索模型 通过从外部知识库中检索当前文档来生成对话回答。此外,Meta 的一组研究人员最近发布了一篇论文,介绍了 检索增强双重指令微调(RA-DIT),一种“轻量级微调方法,通过为任何大型语言模型增加检索能力提供第三种选项”。

从 RAG 到 RCG 模型的转变挑战了信息在训练中的作用。在 RAG 中,信息既是信息的存储库,又是对提示的解释者,而在 RCG 中,模型的功能主要转变为对检索到的(通常是商业策划的)信息进行上下文解释。这可能需要对预训练和微调方法进行修改,因为目前用于训练语言模型的目标可能不适用于这种学习方式。RCG 对模型要求不同的能力,如更长的上下文、数据的可解释性、数据的策划以及其他新挑战。

在学术界或工业界,RCG 系统的实例仍然相当少。在一个例子中,Kioxia Corporation 的研究人员创建了开源的 SimplyRetrieve,该系统使用 RCG 架构通过分离上下文解释和知识记忆来提升 LLM 的性能。在 Wizard-Vicuna-13B 模型上实现时,研究人员发现 RCG 能准确回答关于某组织工厂位置的查询。相比之下,RAG 尝试将检索到的知识库与 Wizard-Vicuna 对该组织的知识进行整合,这导致了部分错误信息或幻觉。这只是一个例子——RAG 和检索关闭生成(ROG)在其他情况下可能会提供正确的回答。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3. 检索中心生成(RCG)、检索增强生成(RAG)和检索关闭生成(ROG)的比较。正确的回答以蓝色显示,而幻觉以红色显示。图片来源: Kioxia Corporation

从 RAG 过渡到 RCG 可以类比于在编程中使用常量(RAG)和变量(RCG)的区别。当一个 AI 模型回答关于一辆可转换的福特野马的问题时,大型模型将熟悉许多与汽车相关的细节,例如引入年份和发动机规格。大型模型还可以添加一些最近检索到的更新,但它主要会根据特定的内部已知术语或常量来回答。然而,当一个模型被部署在准备其下一款车型发布的电动车公司时,该模型需要进行推理和复杂解释,因为大部分数据都是未见过的。模型需要理解如何使用这类信息,例如变量的值,来理解数据。

架构:推理过程中的泛化与抽象能力

在商业环境中检索的大部分信息(商业组织与人员、产品与服务、内部流程和资产)在预训练期间相应的 GenAI 模型可能没有看到,并且在精调期间可能仅仅是抽样。这意味着变压器架构不会将“已知”的单词或术语(即模型先前摄取的内容)作为生成输出的一部分。相反,该架构需要在适当的上下文解释中放置未见过的术语。这在某种程度上类似于上下文学习如何使 LLM 中的一些新推理能力成为可能,而无需额外的训练。

随着这一变化,进一步提升泛化和抽象能力变得不可或缺。需要增强的关键能力是,当在推理过程中遇到未见过的术语或标记时,使用学到的模式进行解释和应用的能力。认知科学中的模式“描述了一种组织信息类别及其关系的思维或行为模式。” 心理模式“可以被描述为一种心理结构,代表世界的某个方面。”类似地,在 GenAI 模型中,模式是解释未见过的标记、术语和数据所需的基本抽象机制。如今的模型已经展示了对新兴模式构建和解释的相当理解,否则它们无法在复杂的未见过的提示上下文数据上执行生成任务。随着模型检索到之前未见过的信息,它需要识别与数据最匹配的模式。这使得模型能够通过与模式相关的知识来解释未见过的数据,而不仅仅是利用上下文中包含的显性信息。值得注意的是,在这次讨论中,我指的是学习和抽象模式作为新兴能力的神经网络模型,而不是依赖于知识图谱中显式模式并在推理时参考的解决方案类别。

从模型能力(认知能力、功能技能和信息获取)这三种类型的视角来看,抽象和模式使用完全属于认知能力类别。特别是,如果小型模型能在构建和使用模式来解释数据的技能上有所提高,它们应能与更大模型的表现相当(在获得适当的数据的前提下)。预计与模式相关的基于课程的预训练将提升模型的认知能力。这包括模型构建多种模式的能力、根据生成过程识别合适的模式,以及插入/利用模式构建的信息以创造最佳结果。

例如,研究人员展示了当前的 LLM 如何使用假设到理论(HtT)框架来学习基本的模式。研究人员发现,LLM 可以用来生成规则,然后按照这些规则解决数值和关系推理问题。GPT-4 发现的规则可以视为理解家庭关系的详细模式(见图 4)。未来的家庭关系模式可能会更加简洁和强大。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4. 使用 CLUTRR 数据集进行关系推理,Hypotheses-to-Theories 框架促使 GPT-4 生成类似模式的规则供 LLM 在回答测试问题时遵循。图像来源: Zhu et al.

将此应用于一个简单的商业案例,GenAI 模型可以使用一种模式来理解公司供应链的结构。例如,知道“B 是 A 的供应商”和“C 是 B 的供应商”意味着在分析文档以评估潜在的供应链风险时,“C 是 A 的二级供应商”是重要的。

在一个更复杂的案例中,比如教会 GenAI 模型记录患者就医情况的变化和细微差别,在预训练或微调期间建立的紧急模式将为理解检索的信息提供结构,以生成报告或支持医疗团队的问题和答案。该模式可以在模型中通过更广泛的患者护理案例训练/微调中出现,包括预约以及测试和程序等其他复杂元素。当 GenAI 模型接触到所有示例时,它应该创建解读在推理期间提供的部分患者数据的专业知识。模型对过程、关系和变化的理解将使其能够正确解释以前未见过的患者案例,而无需在提示中提供过程信息。相反,它不应尝试记忆在预训练或微调过程中接触到的特定患者信息。这种记忆是不利的,因为患者信息不断变化。模型需要学习构造,而不是特定的案例。这种设置还可以最小化潜在的隐私问题。

总结

随着 GenAI 在各行各业的大规模部署,企业对高质量专有信息的依赖以及对可追溯性和可验证性的要求显著增加。这些关键要求,加上对成本效率和集中的应用的压力,推动了对小型、针对性的 GenAI 模型的需求,这些模型旨在解释局部数据,这些数据在预训练过程中大多未曾见过。以检索为中心的系统需要提升一些深度学习 GenAI 模型可以掌握的认知能力,例如构建和识别合适的模式。通过使用 RCG 并指导预训练和微调过程,以创建反映认知结构的泛化和抽象,GenAI 可以在理解模式和从检索中理解未见数据的能力上取得飞跃。精炼的抽象(例如基于模式的推理)和高效的认知能力似乎是下一个前沿。

了解更多:GenAI 系列

生存之道:紧凑生成 AI 模型是规模化成本效益 AI 的未来

参考资料

  1. Gillis, A. S. (2023 年 10 月 5 日)。 检索增强生成。 Enterprise AI。 www.techtarget.com/searchenterpriseai/definition/retrieval-augmented-generation

  2. Singer, G. (2023 年 7 月 28 日)。 生存之道:紧凑生成 AI 模型是规模化成本效益 AI 的未来。 Medium。 towardsdatascience.com/survival-of-the-fittest-compact-generative-ai-models-are-the-future-for-cost-effective-ai-at-scale-6bbdc138f618

  3. 在 DevDay 宣布的新模型和开发者产品。 (n.d.)。 openai.com/blog/new-models-and-developer-products-announced-at-devday

  4. Meta AI。 (n.d.)。 介绍 Llama 2。 ai.meta.com/llama/

  5. Lewis, P. (2020 年 5 月 22 日)。 检索增强生成用于知识密集型自然语言处理任务。 arXiv.org。 arxiv.org/abs/2005.11401

  6. LangChain。 (n.d.)。 www.langchain.com

  7. Haystack。 (n.d.)。 Haystack。 haystack.deepset.ai/

  8. Guu, K. (2020 年 2 月 10 日)。 REALM:检索增强语言模型预训练。 arXiv.org。 arxiv.org/abs/2002.08909

  9. Intel Labs。 (n.d.)。 GitHub — Intel Labs/FastRAG:高效检索增强和生成框架。 GitHub。 github.com/IntelLabs/fastRAG

  10. Fleischer, D. (2023 年 8 月 20 日)。 在 fastRAG 中使用稠密检索器的开放域问答 — Daniel Fleischer — Medium。 medium.com/@daniel.fleischer/open-domain-q-a-using-dense-retrievers-in-fastrag-65f60e7e9d1e

  11. Lin, X. V. (2023 年 10 月 2 日)。 RA-DIT:检索增强双指令调整。 arXiv.org。 arxiv.org/abs/2310.01352

  12. Ng, Y. (2023 年 8 月 8 日)。 SimplyRetrieve:私密轻量级检索中心生成 AI 工具。 arXiv.org。 arxiv.org/abs/2308.03983

  13. Wikipedia contributors。 (2023 年 9 月 27 日)。 模式(心理学)。 Wikipedia。 en.wikipedia.org/wiki/Schema_(psychology)

  14. Wikipedia contributors。 (2023 年 8 月 31 日)。 心理模型。 Wikipedia。 en.wikipedia.org/wiki/Mental_schema

  15. Zhu, Z. (2023 年 10 月 10 日). 大型语言模型可以学习规则. arXiv.org. arxiv.org/abs/2310.07064

KServe:基于 Kubernetes 的高可扩展机器学习部署

原文:towardsdatascience.com/kserve-highly-scalable-machine-learning-deployment-with-kubernetes-aa7af0b71202

Kubernetes 模型推理变得简单。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Lloyd Hamilton

·发表于 Towards Data Science ·阅读时间 10 分钟·2023 年 5 月 29 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源于 KServe

随着 chatGPT 的发布,避免利用机器学习的技术变得越来越困难。从你消息应用中的文本预测到智能门铃上的面部识别,机器学习(ML)几乎存在于我们今天使用的每一项技术中。

机器学习技术如何交付给消费者是组织在开发过程中必须面对的许多挑战之一。ML 产品的部署策略对产品的最终用户有着显著影响。这可能意味着你 iPhone 上的 Siri 和你网页浏览器中的 chatGPT 之间的区别。

在 ChatGPT 那光鲜的用户界面和过于自信的聊天对话背后,隐藏着部署大型语言 ML 模型所需的复杂机制。ChatGPT 建立在一个高度可扩展的框架上,旨在在其指数级采用过程中提供和支持该模型。实际上,实际的 ML 模型仅占整个项目的一小部分。这些项目通常是跨学科的,要求在数据工程、数据科学和软件开发方面的专业知识。因此,简化模型部署过程的框架在将模型推向生产中变得越来越重要,帮助组织节省时间和金钱。

如果没有合适的操作框架来支持和管理 ML 模型,组织在尝试扩大生产中的 ML 模型数量时通常会遇到瓶颈。

虽然在竞争激烈的 MLOps 工具市场中没有出现明显的赢家,但 KServe 正成为帮助组织满足 ML 模型可扩展性要求的越来越受欢迎的工具。

注意:我与 KServe 没有任何关联,也没有获得赞助来撰写这篇文章。

什么是 KServe?

KServe 是一个高度可扩展的机器学习部署工具包,适用于 Kubernetes。它是一个建立在 Kubernetes 之上的编排工具,利用了另外两个开源项目,Knative-Serving 和 Istio;稍后会详细介绍。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源于 KServe

KServe 通过将部署统一到一个资源定义中,显著简化了将 ML 模型部署到 Kubernetes 集群中的过程。它使得机器学习部署成为任何 ML 项目的一部分,易于学习,并最终降低了进入门槛。因此,使用 KServe 部署的模型比使用传统的 Kubernetes 部署(需要 Flask 或 FastAPI 服务)的模型更易于维护。

使用 KServe,无需在通过 HTTPS 将模型暴露到互联网之前将其封装在 FastAPI 或 Flask 应用程序中。KServe 内置了本质上复制这一过程的功能,但无需维护 API 端点、配置 Pod 副本或在 Kubernetes 中配置内部路由网络。你只需将 KServe 指向你的模型,它将处理其余的部分。

除了简化部署过程之外,KServe 还提供了许多功能,包括金丝雀部署、推理自动扩展和请求批处理。这些功能将不在本讨论范围之内。然而,本指南希望能够为进一步探索打下基础。

首先,让我们讨论 KServe 所依赖的两个关键技术,Istio 和 Knative。

Istio

KServe 所带来的许多功能在没有 Istio 的情况下将很难实现。Istio 是一个服务网格,扩展了部署在 Kubernetes 中的应用程序。它是一个专门的基础设施层,增加了可观测性、流量管理和安全性等功能。对于熟悉 Kubernetes 的人来说,Istio 替代了通常在 Kubernetes 集群中找到的标准 Ingress 定义。

随着基于 Kubernetes 的系统规模扩大,管理流量和维护可观测性的复杂性也在增加。Istio 的一个最佳功能是能够集中控制服务级别的通信。这使得开发人员对服务之间的通信有更大的控制和透明度。

使用 Istio,开发人员不需要设计能够处理流量认证或授权的应用程序。最终,Istio 有助于减少部署应用程序的复杂性,使开发人员能够集中精力关注应用程序的关键组件。

通过利用 Istio 的网络功能,KServe 可以提供包括金丝雀部署、推理图和自定义变换器等功能。

KNative

另一方面,Knative 是一个开源企业级解决方案,用于构建无服务器和事件驱动的应用程序。Knative 基于 Istio 构建,提供类似于 AWS Lambdas 和 Azure Functions 的无服务器代码执行能力。Knative 是一个与平台无关的解决方案,用于在 Kubernetes 中运行无服务器部署。

Knative 的一个最佳功能是缩放到零的特性。这是 KServe 能够扩展或缩小 ML 模型部署的关键组件,并且能够最大化资源利用率和节省成本。

我应该使用 KServe 吗?

KServe 和许多其他工具一样,并不是一个适合所有组织需求的一刀切解决方案。由于需要一定的 Kubernetes 经验,其入门成本较高。如果你刚刚开始使用 Kubernetes,有许多在线资源,我强烈建议查看 DevOps 频道的资源。不过,即使没有深入了解 Kubernetes,也可以学习使用 KServe。

KServe 在已经使用 Kubernetes 的组织中将是理想选择,这些组织已经具备了与 Kubernetes 相关的知识。它也适合那些希望摆脱或补充像 SageMaker 或 Azure Machine Learning 等托管服务的组织,以便对模型部署过程拥有更大的控制权。增加的所有权可以显著降低成本,并提高配置能力,以满足项目的具体要求。

尽管如此,正确的云基础设施决策将依赖于具体情况,因为基础设施需求在不同公司之间会有所不同。

先决条件

本指南将引导你完成设置 KServe 所需的步骤。你将了解如何安装 KServe 并服务你的第一个模型。

在继续之前,需要满足几个先决条件。你将需要以下内容:

Kubernetes 集群

对于本教程,我推荐使用 Kind 来实验 Kubernetes 集群。它是一个运行本地 Kubernetes 集群的工具,无需启动云资源。此外,如果你在多个集群之间工作,我强烈推荐使用 Kubectx 作为一个轻松切换 Kubernetes 上下文的工具。

然而,在运行生产工作负载时,你将需要访问一个完全功能的 Kubernetes 集群来配置 DNS 和 HTTPS。

在 Kind 中部署 Kubernetes 集群,使用:

kind create cluster --name kserve-demo

切换到正确的 Kubernetes 上下文,使用:

kubectx kind-kserve-demo

安装

以下步骤将安装 Istio v1.16、Knative Serving v1.7.2 和 KServe v0.10.0。这些版本最适合本教程,因为 Knative v1.8 及以后版本将需要 DNS 配置进行入口,这增加了当前教程范围之外的复杂性。

  1. Istio 安装。
# Install istio
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.16.0 TARGET_ARCH=x86_64 sh -
istioctl install --set profile=default -y

2. 安装 KNative Serving。

# Install the Knative Serving component
export KNATIVE_VERSION="v1.7.2"
kubectl apply -f https://github.com/knative/serving/releases/download/knative-$KNATIVE_VERSION/serving-crds.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/knative-$KNATIVE_VERSION/serving-core.yaml

# Install istio-controller for knative
kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.7.0/net-istio.yaml

3. 安装证书管理器。证书管理器用于管理 HTTPs 流量的有效证书。

helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.11.0 --set installCRDs=true

4. 为模型创建一个命名空间。

kubectl create namespace kserve

5. 克隆KServe仓库。

git clone git@github.com:kserve/kserve.git

6. 将 KServe 自定义资源定义和 KServe 运行时安装到集群中的模型命名空间。

cd kserve
helm install kserve-crd charts/kserve-crd -n kserve
helm install kserve-resources charts/kserve-resources -n kserve

太好了!我们现在已经在集群上安装了 KServe。让我们开始部署吧!

第一个推理服务

为确保部署顺利,让我们部署一个演示推理服务。部署的源代码可以在这里找到。

kubectl apply -n kserve -f - <<EOF
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
  name: "sklearn-iris"
spec:
  predictor:
    model:
      modelFormat:
        name: sklearn
      storageUri: "gs://kfserving-examples/models/sklearn/1.0/model"
EOF

上面的 yaml 资源定义部署了一个测试推理服务,该服务使用 SciKit-Learn 库训练的公开可用模型。KServe 支持许多不同的机器学习库。这些包括 MLFlow、PyTorch 或 XGBoost 模型;每次发布时都会添加更多。如果这些现成的库都不符合你的要求,KServe 还支持自定义预测器

可以通过获取命名空间中的可用 pod 来监控当前部署的状态。

kubectl get pods -n kserve

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由作者提供

如果在部署过程中遇到问题,请使用以下命令进行调试:

kubectl describe pod <name_of_pod> -n kserve

我们还可以通过以下命令检查推理服务部署的状态:

kubectl get isvc -A

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由作者提供

如果推理服务标记为 true,我们就可以进行第一次预测了。

执行预测

为了进行预测,我们需要确定我们的 Kubernetes 集群是否运行在支持外部负载均衡器的环境中。

kubectl get svc istio-ingressgateway -n istio-system

Kind 集群

使用 Kind 部署的集群不支持外部负载均衡器,因此你将会有一个类似下面的入口网关。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Kind 外部负载均衡器(图片由作者提供)

在这种情况下,我们需要将 istio-ingressgateway 的端口转发,这样可以通过localhost访问它。

将 istio 入口网关服务的端口转发到localhost上的端口8080,使用以下命令:

kubectl port-forward -n istio-system service/istio-ingressgateway 8080:80

然后用以下命令设置入口主机和端口:

export INGRESS_HOST=localhost
export INGRESS_PORT=8080

Kubernetes 集群

如果外部 IP 有效且不显示<pending>,我们就能够通过该 IP 地址在互联网上发送推理请求。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

入口网关 IP 地址(图片由作者提供)

用以下命令设置入口主机和端口:

export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')

执行推理

准备一个用于推断请求的输入 json 文件。

cat <<EOF > "./iris-input.json"
{
  "instances": [
    [6.8,  2.8,  4.8,  1.4],
    [6.0,  3.4,  4.5,  1.6]
  ]
}
EOF

然后使用 curl 执行推断:

SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve -o jsonpath='{.status.url}' | cut -d "/" -f 3)
curl -v -H "Host: ${SERVICE_HOSTNAME}" -H "Content-Type: application/json" "http://${INGRESS_HOST}:${INGRESS_PORT}/v1/models/sklearn-iris:predict" -d @./iris-input.json 

请求将通过 istio-ingress 网关发送到 KServe 部署。如果一切正常,我们将从推断服务收到一个 json 回复,其中包含每个实例的预测值 [1,1]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

缩放到零

通过利用 Knative 的特性,KServe 支持缩放到零的能力。此功能通过将未使用的 Pods 缩放为零来有效管理集群中的有限资源。缩放到零的能力允许创建一个响应请求的反应系统,而不是一个始终运行的系统。这将使得在集群中部署更多的模型成为可能,相较于传统的部署配置。

然而,请注意,对于已缩放下来的 Pods,会有冷启动的惩罚。这将根据镜像/模型的大小和可用的集群资源而有所不同。如果集群需要扩展额外的节点,冷启动可能需要 5 分钟;如果模型已经缓存到节点上,冷启动可能需要 10 秒。

让我们修改现有的 scikit-learn 推断服务,通过定义 minReplicas: 0 来启用缩放到零。

kubectl apply -n kserve -f - <<EOF
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
  name: "sklearn-iris"
spec:
  predictor:
    minReplicas: 0
    model:
      modelFormat:
        name: sklearn
      storageUri: "gs://kfserving-examples/models/sklearn/1.0/model"
EOF

通过将 minReplicas 设置为 0,这将指示 Knative 在没有 HTTP 流量时将推断服务缩放为零。你会注意到,在 30 秒后,Sklearn-Iris 模型的 Pods 将会被缩放到零。

kubectl get pods -n kserve

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sklearn-Iris 预测器缩放到零

要重新初始化推断服务,请向相同的端点发送预测请求。

SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve -o jsonpath='{.status.url}' | cut -d "/" -f 3)
curl -v -H "Host: ${SERVICE_HOSTNAME}" "http://${INGRESS_HOST}:${INGRESS_PORT}/v1/models/sklearn-iris:predict" -d @./iris-input.json

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这将触发 Pods 的冷启动初始化并返回一个预测结果。

结论

KServe 简化了机器学习部署的过程,并缩短了生产的路径。当与 Knative 和 Istio 结合使用时,KServe 具有高度的可定制性,并带来许多与托管云解决方案提供的功能相媲美的特性。

当然,将模型部署过程迁移到内部也有其固有的复杂性。然而,平台所有权的增加将提供更大的灵活性,以满足项目特定要求。凭借正确的 Kubernetes 专业知识,KServe 可以成为一个强大的工具,使组织能够轻松地在任何云提供商上扩展其机器学习部署,以满足不断增长的需求。

L1 与 L2 正则化在机器学习中的比较:区别、优势及如何在 Python 中应用

原文:towardsdatascience.com/l1-vs-l2-regularization-in-machine-learning-differences-advantages-and-how-to-apply-them-in-72eb12f102b5

深入探讨 L1 和 L2 正则化技术,解释它们为何对防止模型过拟合至关重要

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Andrea D’Agostino

·发表在 Towards Data Science ·阅读时间 8 分钟·2023 年 2 月 23 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由作者提供。

机器学习是一个在技术和工业领域经历巨大发展的学科。

得益于其算法和建模技术,我们可以构建能够从过去数据中学习、泛化并对新数据进行预测的模型。

然而,在某些情况下,模型可能会过拟合训练数据,从而失去泛化能力。这种现象称为过拟合

对分析师来说,理解过拟合是什么以及为什么它是创建预测模型时的主要障碍之一是相当重要的。

过拟合的一个大致概念是这样的

当一个模型过于复杂或对训练数据拟合得过好时,它可能对这些特定数据非常准确,但对从未见过的数据的泛化能力差。这意味着模型在现实生活中应用于新数据时将无效

想了解更多关于过拟合的信息?阅读标题为 克服机器学习中的最大障碍:过拟合 的文章,该文章发表在 TDS 上。

正则化技术可以用于防止过拟合。

正则化一词涵盖了一组简化预测模型的技术。在这篇文章中,我们将重点介绍两种正则化技术,L1 和 L2,解释它们的区别,并展示如何在 Python 中应用它们。

什么是正则化,为什么它很重要?

简单来说,正则化模型意味着在训练阶段改变其学习行为。

正则化通过 对模型复杂度施加惩罚 来帮助防止过拟合——如果模型过于复杂,在训练过程中将受到惩罚,这有助于保持模型复杂性和对未见数据的泛化能力之间的良好平衡。

要添加 L1 或 L2 正则化,我们将修改模型的损失函数。这是学习算法在训练阶段试图优化的函数。

正则化通过分配一个基于模型复杂度增加的惩罚来发生。

以线性回归为例,MSE(均方误差——有关回归模型评估指标的更多信息请点击这里)是典型的损失函数,可以表示为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中算法的目标是最小化预测值 f(x) 与观察值 y 之间的差异。

在方程中,f(x) 是回归线,这将等于

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,算法将需要通过最小化 MSE 从训练集找出参数 wb 的值。

如果一些参数 w 接近或等于零,则模型被认为较少复杂。

L1 和 L2 正则化

现在让我们看看 L1 和 L2 正则化之间的区别。

L1 正则化

L1 正则化,也称为“套索”,对模型权重的绝对值总和施加惩罚。

这意味着对模型贡献不大的权重将被归零,这可能导致自动特征选择(因为对应于不重要特征的权重实际上会被归零)。

这使得 L1 在特征选择问题和稀疏模型中尤其有用。

以上述 MSE 公式为例,L1 正则化看起来如下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 C 是一个 控制正则化强度的模型超参数C 的值越高,我们的权重越会趋向于零。

行话中,这被称为 稀疏模型,其中大多数参数的值为零。

这里的风险是 非常高的 C 值会导致模型欠拟合,这与过拟合相反——即它不会捕捉到我们数据中的模式。

L2 正则化

另一方面,L2 正则化,也称为 岭回归正则化,将权重的平方添加到正则化项中。

这意味着较大的权重会被减少但不会被归零,这导致与 L1 正则化相比,模型的变量较少但权重更分散。

L2 正则化在你有很多高度相关的变量时尤其有用,因为它倾向于“分散”权重到所有变量中,而不是只关注其中的一些。

如前所述,让我们看看初始方程如何变化以集成 L2。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

L2 正则化可以提高模型的稳定性,尤其在训练数据噪声或不完整时,通过减少异常值或噪声对变量的影响。

如何在 Sklearn 和 Python 中应用正则化

在这个例子中,我们将看到如何将正则化应用于逻辑回归模型以解决分类问题。

我们将看到性能如何随 C 值的变化而变化,并比较模型对输入数据的拟合准确性。

我们将使用 Sklearn 中著名的 乳腺癌数据集。让我们首先看看如何导入它以及所有的库。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# import the dataset from sklearn
breast_cancer = load_breast_cancer()

# we create a variable "data" which contains the dataframe from the dataset
data = pd.DataFrame(data=breast_cancer['data'], columns=breast_cancer['feature_names'])
data['target'] = pd.Series(breast_cancer['target'], dtype='category')

作为分类问题,我们将使用准确率来衡量模型的性能。如果你有兴趣了解更多,请阅读我关于如何衡量二分类模型性能的文章。

现在让我们创建一个函数来对 dataframe 上的 L1 和 L2 正则化进行比较。

 def plot_regularization(df, reg_type='l1'):
 # we split our data into training and testing
    X = df.drop('target', axis=1)
    y = df['target']
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

 # we define the different values of C
    Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]
    coefs = []
    test_scores = []
    train_scores = []
    for C in Cs:
     # we train the model for the different values of C
        clf = LogisticRegression(penalty=reg_type, C=C, solver='liblinear')
        clf.fit(X_train, y_train)
        # we save the performances
        coefs.append(clf.coef_.ravel())
        train_scores.append(clf.score(X_train, y_train))
        test_scores.append(clf.score(X_test, y_test))

    reg = reg_type.capitalize()

    # and create some charts
    fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 4))
    ax1.plot(Cs, train_scores, 'b-o', label='Training Set')
    ax1.plot(Cs, test_scores, 'r-o', label='Test Set')
    plt.suptitle(f'{reg} regularization')
    ax1.set_xlabel('C')
    ax1.set_ylabel('Accuracy')
    ax1.set_xscale('log')
    ax1.set_title('Performance')
    ax1.legend()

    coefs = np.array(coefs)
    n_params = coefs.shape[1]
    for i in range(n_params):
        ax2.plot(Cs, coefs[:, i], label=X.columns[i])
    ax2.axhline(y=0, linestyle='--', color='black', linewidth=2)
    ax2.set_xlabel('C')
    ax2.set_ylabel('Coefficient values')
    ax2.set_xscale('log')
    ax2.set_title('Coefficients')
    plt.show()

我们通过观察 L1 正则化来应用这一逻辑。

plot_regularization(data, 'l1')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

L1 正则化如何影响模型性能。图像由作者提供。

我们看到 L1 正则化如何使模型系数在许多 C 值下接近于零。根据模型,系数值最高的是预测中最重要的特征

我们也看到过拟合的开始——在C=100时,训练集的性能提高,而测试集的性能下降。

我们现在应用相同的函数来评估 L2 的效果。

plot_regularization(data, 'l2')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

L2 正则化如何影响模型性能。图像由作者提供。

系数总是大于零,从而为最相关的特征创建了逐渐增加的权重分布。我们注意到在C=100时有非常轻微的过拟合。

其他正则化技术

除了 L1 和 L2 正则化,还有其他正则化技术可以应用于机器学习模型。其中包括 dropout 和 early stopping

Dropout

Dropout 是一种在神经网络中减少过拟合的技术。Dropout 通过在训练阶段随机关闭一些神经元来工作,迫使神经网络找到其他方法来表示数据。

Early stopping

Early stopping 是另一种用于避免机器学习模型过拟合的技术。这种技术包括在验证集上的性能开始恶化时停止模型训练。这可以防止模型过度学习训练数据而在未见过的数据上泛化效果不好。

想了解更多关于早停的信息?阅读标题为TensorFlow 中的早停 - 防止神经网络过拟合的文章,发表于 TDS

一般来说,通过使用正则化技术的组合可以避免过拟合。然而,最合适的技术选择将取决于数据集和所用机器学习模型的特性。

总结

总之,正则化是一种重要的机器学习技术,有助于提高模型性能通过避免在训练数据上过拟合。

L1 和 L2 正则化是最常用的技术,但根据上下文,还有其他可能有用的技术。例如,dropout 几乎总是出现在深度学习中,即神经网络中。

在我们的例子中,我们看到了正则化如何影响逻辑回归模型的性能,以及 C 的值如何影响正则化本身。我们还检查了 C 值变化时模型系数的变化,以及 L1 和 L2 正则化如何以不同的方式影响模型系数。

感谢您抽出时间阅读我的文章!😊

下次见!

如果您想支持我的内容创作活动,请随时通过以下推荐链接加入 Medium 的会员计划。我将获得您投资的一部分,您将能够无缝访问 Medium 上的数据科学等众多文章。

[## 通过我的推荐链接加入 Medium - Andrea D’Agostino

阅读 Andrea D’Agostino 的每个故事(以及 Medium 上其他数千名作者的故事)。您的会员费直接…

medium.com](https://medium.com/@theDrewDag/membership?source=post_page-----72eb12f102b5--------------------------------)

推荐阅读

对感兴趣的读者,这里有我推荐的每个与机器学习相关主题的书单。这些书在我看来是必读的,对我的职业生涯产生了重大影响。

免责声明:这些是亚马逊附属链接。我将因推荐这些商品而从亚马逊获得少量佣金。您的体验不会改变,也不会额外收费,但这将帮助我扩大业务,并制作更多关于 AI 的内容。

有用的链接(由我编写)

拉格朗日乘子、KKT 条件和对偶性——直观解释

原文:towardsdatascience.com/lagrange-multipliers-kkt-conditions-duality-intuitively-explained-de09f645b068?source=collection_archive---------3-----------------------#2023-11-03

理解 SVM、正则化、PCA 以及许多其他机器学习概念的关键

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Essam Wisam

·

关注 发表在 Towards Data Science ·13 min read·Nov 3, 2023

在这个故事中,我们将深入探索数学优化中的三个相关概念。这些概念曾让我花费大量时间和精力才完全掌握,因此我旨在以直观的方式向所有读者展示它们。我们的旅程将从对无约束优化的回顾开始,随后考虑有约束优化,我们将利用拉格朗日乘子和 KKT 条件。我们还将深入探讨这些概念之间的相互作用及其与对偶性概念的联系。

因此,在本故事结束时,你将了解如何解决约束和无约束优化问题,并能够直观地推导出这些方法为何有效。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Filip Mroz 提供,来自 Unsplash

无约束优化

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由 Cdang 绘制的多变量函数图,来源于 Wikimedia CC BY-SA 4.0。

在无约束优化中,我们给定一个多变量函数 f(u),并希望找到向量 u* 的值,使得函数 f(u)* 的值最优(最大值或最小值)。

一般来说,函数可能有多个极大值和极小值,如上所示。在经典机器学习中以及本故事中,我们主要关注的是凸函数(这些函数也足够光滑)。 函数意味着该函数至多有一个最优值(当函数是损失函数时,这个最优值是一个最小值),如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Andrebis 绘制的 3D 表面图,来源于 Wikipedia CC BY-SA 3.0。

处理凸函数要容易得多,因为否则很难判断找到的最小值是否是所有值中的最低点(即全局最小值),而不仅仅是某个局部最小值。一般来说,即使存在一个最小值,也可能有多个点满足它(例如,如果函数是平的),我们将假设这种情况不会发生以简化解释;假设它发生也不会改变我们得出的任何结论。

对给定的多变量函数 f(u) 进行无约束优化可以通过解 ∇ᵤf(u) = 0 来实现。如果 f(u) 是一个 n 变量的函数 (u*, u,…,u)*,那么这就是一个 n 方程的系统:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解出这些方程后,会得到最优解 u=(u,u**₂,…,u**ₙ*)*,即最优值(例如最小值)所在的位置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由 Mike Run 绘制的表面上的切平面,来源于 Wikimedia CC BY-SA 4.0。

要理解这点,请回忆一下:

  • 在任意点 u 处,切平面的法向量形式为 (∂f(u)/∂u₁, ∂f(u)/∂u₂, …, ∂f(u)/∂uₙ, f(u))

  • 在任何最小值或最大值处,切平面都是水平的(视觉上明显)

  • 因此,每当 ∇ᵤf(u) = 0 成立时,该点处必定存在水平切平面,因此,它一定是我们寻找的最小值。

另一种即将有用的合理化方法是观察梯度指向最大增加的方向(以及与最大减少的方向相反)。因此,当 ∇ᵤf(u) = 0 时,必须要么无法(没有方向能)从该点增加函数(即,处于最大值),要么从该点减少函数(即,处于最小值)。

无约束优化总结

给定: f(u)

目标: u,其中 f(u) 最小

方法: 求解 ∇ᵤf(u) = 0,因为在最小值处成立

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源于 Jorge ReynaUnsplash

受限优化

在这种类型的优化中,我们给定形式为 g(u)=0 或 g(u)≤0 的等式约束(否则我们可以通过重新排列项或乘以负数将其转化为这种形式),并且我们希望仅在满足约束的所有点上进行优化

我们通常假设等式约束 g(u)=0 是仿射的(线性的一般化),而不等式约束 g(u)≤0 涉及凸函数,以便整个优化问题是 凸的(否则,仅 f(u) 是凸的可能不足以保证唯一最优值)。

带有等式约束的优化

在此问题中,我们给定一个多变量函数 f(u) 和一个约束 g(u)=0,我们希望找到点 u*,使得 g(u)=0* 且 f(u)* 最小(即,满足约束的情况下的最低点)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

受限优化由 Jacobmelgrad维基百科 CC BY-SA 3.0.

例如,在所示的示例中,目标函数为 f(u₁,u₂*) = u₁+ u₂(3D 平面),约束为 u²₁+ u²₂=1(2D 圆)。目标是找到点(u₁, u₂),使得在满足 u²₁+ u*²₂=1 的情况下,该点对应于平面上的最低点(即,圆在平面上的投影最低点)。

解决这种类型的受限优化问题的一种方法是使用拉格朗日乘子法。简单来说,拉格朗日乘子定理表明,任何优化问题的解 u* 形式为:

最小化 f(u) 使得 g(u)=0

必须满足方程∇ᵤL(u,λ)=0*,对于某些 λ∈R (并且显然,g(u)=0),其中 L 是拉格朗日函数,定义为 L(u,λ)=f(u)+λg(u)。这假设 ∇ᵤg(u)≠0*。

由此可得,我们可以按照以下方法求解带有等式约束的受限优化问题(假设 ∇ᵤg(u)≠0*):

  1. 写出拉格朗日函数 L(u,λ)=f(u)+λg(u)

  2. ∇ᵤL(u,λ) = 0(n 个方程)和 g(u)=0 得到 n+1 个未知数 u,u₂*,…,uₙ,λ

  3. 解是 u=(u,u**₂,…,u**ₙ*)*

λ 被称为拉格朗日乘子。我们只需要找到它,因为它是系统的一部分,用于得出解 u

你可以在这里研究与上图对应的例子。在这个例子中,问题不是凸的,解决方案应该会得出任何存在的最小值或最大值。注意,上述步骤(1)和(2)等同于对 L(u,λ)=f(u)+λg(u) 进行无约束优化。也就是说,设定:

∇ L(u,λ) =(∂L(u)/∂u₁, ∂L(u)/∂u₂, …, ∂L(u)/∂uₙ, ∂L(u)/∂λ)= 0

从这个意义上说,拉格朗日乘子法的强大之处在于,它将一个约束优化问题转化为一个无约束优化问题,我们可以通过简单地将梯度设为零来解决它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Jacobmelgrad维基百科上提供的约束优化 CC BY-SA 3.0。

原理

直观地推导出为什么这样做有效并不困难。可行区域 是满足问题约束的点的集合(例如,上述圆上的点);我们希望在这些点中找到使目标函数最优的点。

我们知道 ∇ f(u) 指向最大下降方向的相反方向(沿着最大上升方向)。然而,在我们的情况下,我们只允许在可行区域内移动(满足约束的点);因此,为了在约束下最小化函数,我们应该沿约束曲线的最大下降方向移动(这样我们不会退出可行区域并到达最小值)。

假设约束曲线上的点 u 的切线方向由 r(u) 给出,那么回忆一下向量投影的公式,我们希望沿着以下方向移动,即 ∇ f(u)r(u) 上的投影:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

与上述无约束情况类似,你应该意识到只要这是 0,我们就无法沿约束方向移动以进一步增加 f(u)(如果在最大值处)或减少它(如果在最小值处)。

很明显,为了使其为零,我们需要 r(u)≠0(以确保分母不为零)和 ∇ f(u) ⋅ r(u)=0。对于后者,我们知道约束曲线上的法向量 ∇ g(u) 与切线 r(u) 垂直。因此,我们只需要 ∇ f(u)∇ g(u) 平行。

因此,在最优点 u* 处必须满足:

  1. 约束的法向量非零: ∇ g(u)≠0*(以确保 r(u)≠0*)

  2. 约束满足:g(u)=0*(简单要求)

  3. ∇ f(u)* ∥∇ g(u):存在一个实数β,使得∇ f(u*) =* β∇ g(u)*

注意,通过重新排列项和重新命名 -β,(3)等价于“存在一个实数 λ 使得 ∇ f(u)+λ∇ g(u)=0”。换句话说,∇ᵤL(u,λ) = 0,借此我们直观地推导出了一个约束的拉格朗日乘子定理(如有需要,请向上滚动查看)。

请注意,第一个条件称为约束资格。如果约束在满足(2)和(3)的点上不满足该条件,则没有保证该点是最优的,因为在该点上投影未定义。

多个等式约束

当存在多个约束g₁(u), g(u),…,g(u)*时,该方法可以顺利推广到以下情况:

  1. 写出拉格朗日函数 L(u,λ₁,λ₂*,…,λ) = f(u) + λ₁g₁(u) + λ₂g₂(u) +…+λₖgₖ(u)*

  2. 通过设置∇ᵤL(u,λ₁,λ₂*,…,λ)* = 0(n个方程)和 g₁(u)=0, g₂*(u)=0, …, g(u)=0* 来求解 n+k 个方程,以找到 n+k 个未知数 u,u₂*,…,uₙ, λ₁,λ₂*,…,λ*ₖ

  3. 解为 u=(u,u**₂,…,u**ₙ*)*

假设∇ g(u)0* 可以推广为 g₁(u), ∇ g₂*(u),…,∇ g(u)* 必须线性无关。这称为 LICQ(线性独立约束资格)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由JairphUnsplash提供

带有不等式约束的约束优化

当我们处理形式为g(u)≤0的不等式约束时,问题不会变得更复杂。在这种情况下,我们希望找到满足g(u)≤0的*f(u)*的最优点。

对于上述问题,这意味着可行区域不仅仅是圆上的点,还包括圆内的点。对于特定问题(而不是一般情况),这显然不会改变解决方案。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

受约束的优化由Jacobmelgrad维基百科上提供,CC BY-SA 3.0。经 Shading 修改。

我们不解决拉格朗日乘子条件(2, 3),而是解决一组称为 KKT 条件的四个条件,这些条件是拉格朗日乘子情况的一般化。我们可以如下推导这些条件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

优化问题的不等式约束图由Onmyphd维基百科上提供,CC BY-SA 3.0。

注意,对于一个任意的超曲面 f(u) 和约束 g(u)≤0, 假设是一个凸平滑函数且有一个最优点,那么有两种可能:

  1. 最优点 uᴾ 位于可行区域内。
  • 在这种情况下,优化问题的解 u* 必须是 uᴾg(u)<0* 必须成立(左侧图像)。

  • 在可行区域中不可能找到更优的点,因为 uᴾf(u) 的整个区域(领域)上的最优点(例如最小值)。

  1. 最优点 uᴾ 位于可行区域外。
  • 在这种情况下,如果点是最大值,f(u) 在可行区域中必须只是减少(不能再增加,否则会产生另一个最优点)

  • 如果点是最小值,f(u) 在可行区域中必须只是增加(不能再减少,否则会产生另一个最优点)

  • 因此,最优点 u* 必须位于可行区域的边缘,因为在内部不会变得更好(g(u) = 0* 必须成立)

在第一种情况下,显然求解优化问题等同于求解无约束版本的问题。

∇ᵤf(u) = 0

我们称约束为“非活跃的”是因为它在优化问题中没有影响。

在第二种情况下,显然求解优化问题等同于求解等式约束版本的问题(拉格朗日乘数法)。

对于这种情况唯一需要注意的是,λ 对于最小化必须 ≥ 0,对最大化必须 ≤ 0。对于最小化,这意味着 ∇ᵤf(u)∇ᵤg(u) 指向相反方向(即,β 在 ∇ᵤ f(u) = β∇ᵤg(u) 是 ≤0),这必须成立,因为 ∇ᵤg(u) 指向约束 g(u)≥0 的正侧(基本属性);与此同时,∇ᵤ f(u) 指向约束的负侧,因为 f(u) 在那里增加。对于最大化情况,可以轻松构造类似的论证。

但我们事先不知道这两种情况中的哪一种适用。我们可以按照以下方法合并它们(假设最小化):

  1. 写出拉格朗日函数 L(u,λ)=f(u)+λg(u)

  2. 设置 ∇ᵤL(u,λ) = 0(n 个方程)和 g(u)≤0

  3. 求解解 (u,u₂*,…,uₙ,λ.) 其中一个以上情况适用:

  • λ=0g(u)<0*(λ=0 的第一个情况意味着 ∇ᵤL(u,λ) = ∇ᵤf(u) = 0,因此步骤 1,2 等同于求解 ∇ᵤf(u) = 0

  • g(u)=0* 和 λ≥0(第二种情况,因为 g(u)=0 意味着拉格朗日方法是正确的,这就是我们所做的)

我们可以总结这两点,即 g(u)≤0* 和 λ≥0 必须成立,并且 λg(u)=0* 必须成立(λg(u)* 之一必须为零)。这意味着给定一个形式的优化问题:

最小化 f(u) 使得 g(u)≤0

我们期望最优点 u 满足以下四个条件:

  1. 稳定性:∇ᵤL(u,λ)* = 0

  2. 原始可行性:g(u)≤0*

  3. 双重可行性:λ≥0

  4. 互补松弛性:λg(u)=0*

并且解决这些条件一起产生最优点u。实际上,对于凸优化问题,这些条件是充分但不是必要的。也就是说,

  • 如果一个点满足这些条件(例如,通过一起解决它们找到),那么这足以证明该点是最优的(对于凸问题无需进一步寻找)。

  • 与此同时,这些条件并非点必须为最优点的必要条件。有可能解决这些条件却没有解时,在现实中存在一个满足条件但不满足它们的最优点。例如,考虑f(x) = x和约束x² ≤ 0(此外,这里和另一个 KKT 示例在本文档中解决)。

一旦我们强制执行诸如 LICQ(前述)的约束条件,我们可以保证 KKT 条件既充分又必要。一个更易于检查的替代约束条件是 Slater 的条件,它保证了对于凸问题,KKT 是充分且必要的。

Slater 的条件简单地表明可行域必须有一个内点。也就是说,对于约束g(u)≤0,函数必须有域f(u)内满足g(u)<0的点。这是一个基本条件,在现实生活中几乎总是满足的(但不包括上述反例),这意味着 KKT 很少会错过寻找最优解。

多重约束

当存在多个等式约束h₁(u), h(u),…,h(u)以及多个不等式约束g₁(u), g₂*(u),…,g(u)*时,该方法通过编写完整的拉格朗日函数并仅对不等式约束及其乘子(我们称之为α)检查 KKT 条件来平滑地推广:

0. 写出拉格朗日函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 设置∇ᵤL(u,λ₁,λ₂*,…,λₖ, α₁*, α₂, …, αₚ*)* = 0(n 个方程)

2. 设置h₁(u)=0, h(u)=0, …, h(u)=0(k*个方程),并设置

g₁(u)≤0, g₂*(u)≤0, …, g(u)≤0*(p个不等式)

3. 设置α₁≥0, α₂≥0, …, αₚ≥0(p个不等式)

4. 设置αg₁(u) = α₂g₂*(u) =* αₚgₖ*(u) = 0(p个方程)

总共,您有n+k+p个方程和2p个不等式,您将一起解决以找到n+k+p个变量*(u,u**₂,…,uₙ,λ₁,λ₂*,…,λₖ,α₁*, α₂, …, αₚ ),这将产生最小化函数并满足k+p个约束的解u=(u*,u₂*,…,u**ₙ*)*。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由SpaceX提供的 Unsplash 上获取

对偶原理

对偶原理简单地说明,对于任何优化问题,我们可以写出一个对偶优化问题,解决它可以告诉我们原始问题(称为原始问题)的某些内容或者直接解决它。

对于任何形式的优化问题:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对偶优化问题的形式是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是的,最小化的形式与拉格朗日函数相同

反之亦然,如果是最大化。

示例

例如,我们之前讨论的受约束优化问题:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有相应的对偶问题:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如基本微积分所示,要进行最小化,我们首先做

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这意味着

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,优化问题变成

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在所需的只是对其进行微分并使其等于零,从而得到 λ = 1/√2,这意味着 (x, y*)* = (−1/√2, −1/√2),这与通过 KKT 解决原始问题所得到的解相同。

推导对偶

原始(原始)问题是

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

假设我们定义一个函数,当 u 不在可行区域内(不满足约束)时返回无穷大,否则返回零:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这种情况下,原始问题等价于

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这应该是合理的,因为 f(u)+P(u) 将可行区域之外的值设为无穷大,并保持可行区域不变。这个和的最小值必须发生在可行区域内,即使约束是明确强制的,因为无穷大大于任何东西。

观察到我们可以声明:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因为有了这个,如果:

  • g(u)<0P(u)=0,如之前定义,因为要最大化 λg(u) 必须满足 λ=0(否则由于 g(u)<0 它是负值)

  • g(u)=0P(u)=0,如之前定义,因为 λg(u) 将为零(λ 可以是任何值)

  • g(u)>0 时 *P(u)=*∞,如之前定义,*λ=*∞ 是最大化 λg(u) 的值

因此,原始问题等价于

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

引入 f 到最大值是可以的,因为它不是 λ 的显式函数

这个和对偶问题的区别在于,在对偶中最大值和最小值被交换了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,因为一般来说 MinMax(…) ≥ MaxMin(…),对偶的解将是原始问题解的下界。这被称为弱对偶性。

一个更有趣的情况是,当*MinMax(…) = MaxMin(…)*时,双重问题的解恰好也是原始问题的解(如例子中所示)。这被称为强对偶性。你可以适度容易地证明当 KKT 条件既必要又充分时,该等式成立(因此强对偶性)。换句话说,强对偶性将在 Slater 条件成立的情况下适用于凸问题!

那又怎么样?

如果你考虑一下,解决对偶问题相当于仅在原始问题上应用 KKT 的平稳性和对偶可行性条件。你不再需要应用原始可行性和互补松弛条件,而是需要处理额外的对偶变量的最小化。在许多情况下,这比在原始问题上解决 KKT 要简单得多。这个额外的最小化可以通过线性或二次规划来处理。

多个约束?

在推广到多个约束时,拉格朗日函数的变化正如你所预期的那样(类似于我们所见),我们只需在最大化中为与不等式约束相关的乘子添加α≥0 条件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现代汽车集团拍摄,刊登在Unsplash

希望这个故事帮助你真正理解了无约束优化、拉格朗日乘子、KKT 和对偶性。下次见,再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值