文本挖掘、推荐系统与深度学习入门
1. Word2Vec模型
1.1 模型概述
2013年,谷歌的Tomas Mikolov团队创建了Word2Vec(词向量)模型。该模型利用文档来训练神经网络,以最大化给定单词时上下文的条件概率。它主要使用两种模型:连续词袋模型(CBOW)和连续跳字模型(skip - gram)。
1.2 模型类型
- 连续词袋模型(CBOW) :根据周围上下文词窗口预测当前单词,或者给定一组上下文词,预测可能出现在该上下文中的缺失词。CBOW训练速度比skip - gram快,对于频繁出现的单词有更好的准确性。
- 连续跳字模型(skip - gram) :使用当前单词预测周围上下文词窗口,或者给定一个单词,预测在该上下文中可能出现在其附近的其他单词的概率。skip - gram对频繁和稀有单词都能显示出良好的效果。
1.3 预训练模型下载
可以从以下链接下载谷歌的Word2Vec预训练模型,该模型包含从谷歌新闻数据集中1000亿个单词中提取的300万个单词/短语的词汇表。
URL: https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit
1.4 代码示例
import gensim
# Load Google's pre-trained Word2Vec model.
model = gensim.models.Word2Vec.load_word2vec_format('Data/GoogleNews-vectors-negative300.bin', binary=True)
model.most_similar(positive=['woman', 'king'], negative=['man'], topn=5)
#----output----
[(u'queen', 0.7118192911148071),
(u'monarch', 0.6189674139022827),
(u'princess', 0.5902431607246399),
(u'crown_prince', 0.5499460697174072),
(u'prince', 0.5377321243286133)]
model.most_similar(['girl', 'father'], ['boy'], topn=3)
#----output----
[(u'mother', 0.831214427947998),
(u'daughter', 0.8000643253326416),
(u'husband', 0.769158124923706)]
model.doesnt_match("breakfast cereal dinner lunch".split())
#----output----
'cereal'
1.5 自定义数据集训练
可以在自己的数据集上训练Word2Vec模型,需要记住的关键模型参数有:
-
size
:向量的维度,较大的size值需要更多的训练数据,但可以导致更准确的模型。
-
sg
:0表示CBOW模型,1表示skip - gram模型。
-
min_count
:忽略总频率低于此值的所有单词。
-
window
:句子中当前单词和预测单词之间的最大距离。
sentences = [['cigarette','smoking','is','injurious', 'to', 'health'],['cigarette','smoking','causes','cancer'],['cigarette','are','not','to','be','sold','to','kids']]
# train word2vec on the two sentences
model = gensim.models.Word2Vec(sentences, min_count=1, sg=1, window = 3)
model.most_similar(positive=['cigarette', 'smoking'], negative=['kids'], topn=1)
#----output----
[('injurious', 0.16142114996910095)]
2. 推荐系统
2.1 推荐系统概述
在以消费者为中心的行业中,用户体验的个性化已成为首要任务和新的理念。推荐系统是核心的信息过滤系统,旨在预测用户偏好,并帮助推荐合适的项目,以创建特定于用户的个性化体验。主要有两种类型的推荐系统:基于内容的过滤和协同过滤。
2.2 基于内容的过滤
这种类型的系统专注于项目的相似属性来提供推荐。例如,如果用户购买了某一特定类别的商品,那么会向用户推荐同一类别中的其他类似商品。其基于物品的相似度推荐算法可表示为:
$\hat{b}
{x,m}=\frac{\sum
{i\in N_{x,m}}sim(x,i)b_{i,m}}{\sum_{i\in N_{x,m}}sim(x,i)}$
2.3 协同过滤(CF)
协同过滤专注于用户的相似属性,即根据相似度度量从大量用户中找到口味相似的人。实践中有两种类型的CF实现:基于内存的和基于模型的。
-
基于内存的推荐
:主要基于相似度算法,该算法查看相似用户喜欢的项目,以创建推荐的排名列表,然后可以对排名列表进行排序,向用户推荐前n个项目。其基于用户的相似度推荐算法可表示为:
$pr_{x,k}=r_{m}+\frac{\sum_{y\in N_{x}}sim(x,y)(r_{y,k}-r_{m})}{\sum_{y\in N_{x}}sim(x,y)}$
2.4 代码示例
import numpy as np
import pandas as pd
df = pd.read_csv('Data/movie_rating.csv')
n_users = df.userID.unique().shape[0]
n_items = df.itemID.unique().shape[0]
print '\nNumber of users = ' + str(n_users) + ' | Number of movies = ' + str(n_items)
#----output----
Number of users = 7 | Number of movies = 6
# Create user-item similarity matrices
df_matrix = np.zeros((n_users, n_items))
for line in df.itertuples():
df_matrix[line[1]-1, line[2]-1] = line[3]
from sklearn.metrics.pairwise import pairwise_distances
user_similarity = pairwise_distances(df_matrix, metric='cosine')
item_similarity = pairwise_distances(df_matrix.T, metric='cosine')
# Top 3 similar users for user id 7
print "Similar users for user id 7: \n", pd.DataFrame(user_similarity).loc[6,pd.DataFrame(user_similarity).loc[6,:] > 0].sort_values(ascending=False)[0:3]
#----output----
Similar users for user id 7:
3 8.000000
0 6.062178
5 5.873670
# Top 3 similar items for item id 6
print "Similar items for item id 6: \n", pd.DataFrame(item_similarity).loc[5,pd.DataFrame(item_similarity).loc[5,:] > 0].sort_values(ascending=False)[0:3]
#----output----
0 6.557439
2 5.522681
3 4.974937
2.5 预测函数与评估
# Function for item based rating prediction
def item_based_prediction(rating_matrix, similarity_matrix):
return rating_matrix.dot(similarity_matrix) / np.array([np.abs(similarity_matrix).sum(axis=1)])
# Function for user based rating prediction
def user_based_prediction(rating_matrix, similarity_matrix):
mean_user_rating = rating_matrix.mean(axis=1)
ratings_diff = (rating_matrix - mean_user_rating[:, np.newaxis])
return mean_user_rating[:, np.newaxis] + similarity_matrix.dot(ratings_diff) / np.array([np.abs(similarity_matrix).sum(axis=1)]).T
item_based_prediction = item_based_prediction(df_matrix, item_similarity)
user_based_prediction = user_based_prediction(df_matrix, user_similarity)
# Calculate the RMSE
from sklearn.metrics import mean_squared_error
from math import sqrt
def rmse(prediction, actual):
prediction = prediction[actual.nonzero()].flatten()
actual = actual[actual.nonzero()].flatten()
return sqrt(mean_squared_error(prediction, actual))
print 'User-based CF RMSE: ' + str(rmse(user_based_prediction, df_matrix))
print 'Item-based CF RMSE: ' + str(rmse(item_based_prediction, df_matrix))
#----output----
User-based CF RMSE: 1.0705767849
Item-based CF RMSE: 1.37392288971
y_user_based = pd.DataFrame(user_based_prediction)
# Predictions for movies that the user 6 hasn't rated yet
predictions = y_user_based.loc[6,pd.DataFrame(df_matrix).loc[6,:] == 0]
top = predictions.sort_values(ascending=False).head(n=1)
recommendations = pd.DataFrame(data=top)
recommendations.columns = ['Predicted Rating']
print recommendations
#----output----
Predicted Rating
1 2.282415
y_item_based = pd.DataFrame(item_based_prediction)
# Predictions for movies that the user 6 hasn't rated yet
predictions = y_item_based.loc[6,pd.DataFrame(df_matrix).loc[6,:] == 0]
top = predictions.sort_values(ascending=False).head(n=1)
recommendations = pd.DataFrame(data=top)
recommendations.columns = ['Predicted Rating']
print recommendations
#----output----
Predicted Rating
5 2.262497
2.6 基于模型的协同过滤(以SVD为例)
# calculate sparsity level
sparsity=round(1.0-len(df)/float(n_users*n_items),3)
print 'The sparsity level of is ' + str(sparsity*100) + '%'
import scipy.sparse as sp
from scipy.sparse.linalg import svds
# Get SVD components from train matrix. Choose k.
u, s, vt = svds(df_matrix, k = 5)
s_diag_matrix=np.diag(s)
X_pred = np.dot(np.dot(u, s_diag_matrix), vt)
print 'User-based CF MSE: ' + str(rmse(X_pred, df_matrix))
#----output----
The sparsity level of is 0.0%
User-based CF MSE: 0.015742898995
2.7 推荐系统类型总结
| 推荐系统类型 | 特点 |
|---|---|
| 基于内容的过滤 | 关注物品属性,根据物品相似度推荐 |
| 协同过滤 - 基于内存 | 关注用户相似度,根据相似用户喜好推荐 |
| 协同过滤 - 基于模型 | 如SVD等矩阵分解方法 |
3. 深度学习相关库
3.1 深度学习概述
近年来,深度学习在机器学习领域成为热门话题。深度学习算法的主要目标是利用机器学习实现通用人工智能(AGI),即在机器中复制人类水平的智能,以解决给定领域的任何问题。深度学习在计算机视觉、音频处理和文本挖掘等领域显示出了有希望的成果。
3.2 流行的深度学习库
| 库名称 | 发布年份 | 许可证 | 贡献者数量 | 官方网站 |
|---|---|---|---|---|
| Theano | 2010 | BSD | 284 | http://deeplearning.net/software/theano/ |
| Pylearn2 | 2011 | BSD - 3 - Clause | 117 | http://deeplearning.net/software/pylearn2/ |
| Tensorflow | 2015 | Apache - 2.0 | 660 | http://tensorflow.org |
| Keras | 2015 | MIT | 349 | https://keras.io/ |
| MXNet | 2015 | Apache - 2.0 | 280 | http://mxnet.io/ |
| Caffe | 2015 | BSD - 2 - Clause | 238 | http://caffe.berkeleyvision.org/ |
| Lasagne | 2015 | MIT | 58 | http://lasagne.readthedocs.org/ |
3.3 各库简介
- Theano :主要由蒙特利尔大学的学者开发的Python库,允许高效地定义、优化和评估涉及复杂多维数组的数学表达式,设计用于与GPU配合使用,并执行高效的符号微分,具有广泛的单元测试,速度快且稳定。
- TensorFlow :由谷歌研究人员开发的用于可扩展机器学习的数值计算库,使用数据流图进行计算,目前被谷歌产品用于研究和生产,于2015年开源,在机器学习领域广受欢迎。
- Pylearn2 :基于Theano的机器学习库,用户可以使用数学表达式编写新的模型/算法,Theano会对这些表达式进行优化、稳定和编译。
- Keras :一个高级神经网络库,用Python编写,能够在TensorFlow或Theano之上运行,是一个接口而非完整的机器学习框架,易于上手,高度模块化,易于扩展以构建/支持复杂模型。
- MXNet :由卡内基梅隆大学(CMU)、纽约大学(NYU)、新加坡国立大学(NUS)和麻省理工学院(MIT)的研究人员合作开发,是一个轻量级、便携式、灵活的分布式/移动库,支持多种语言,如Python、R、Julia、Scala、Go、JavaScript等。
- Caffe :由伯克利视觉与学习中心(BVLC)开发的深度学习框架,用C++编写,有Python/Matlab接口。
- Lasagne :一个轻量级库,用于在Theano中构建和训练神经网络。
3.4 库的选择
对于初学者来说,“Scikit - learn”和“Keras”库(后端可以是TensorFlow或Theano)是掌握概念的最佳选择,也是机器学习从业者最广泛使用的库。同时,记得安装“graphviz”和“pydot - ng”包以支持神经网络的图形化视图。具有GPU功能的系统对于深度学习库是理想的,因为图像/文本/音频数据集的数值表示很大且计算密集。
4. 人工神经网络(ANN)基础
4.1 人类视觉原理
在深入了解深度学习细节之前,了解人类视觉的工作原理很重要。人类大脑是一个复杂的连接神经网络,大脑的不同区域负责不同的工作,这些区域接收信号并进行处理以采取必要的行动。大脑由称为神经元的小连接单元组成,它们相互发送电信号,长期知识由神经元之间连接的强度表示。当我们看到物体时,光线穿过视网膜,视觉信息被转换为电信号,电信号在几毫秒内通过大脑内不同区域的连接神经元层次结构,以解码信号/信息。
4.2 计算机处理图像原理
在计算机中,图像表示为一个大的三维数字数组。例如,一个28x28x1(宽x高x深度)的灰度手写数字图像会产生784个数据点,数组中的每个数字是一个从0(黑色)到255(白色)的整数。在典型的分类问题中,模型必须将这个大矩阵转换为单个标签。对于彩色图像,每个像素还有三个颜色通道:红、绿、蓝(RGB),因此相同的彩色图像大小为28x28x3 = 2352个数据点。
4.3 简单分类模型处理图像的挑战
图像分类对计算机来说具有挑战性,因为图像表示存在各种挑战。简单的分类模型可能无法在不进行大量特征工程的情况下解决这些问题。常见的视觉挑战如下表所示:
| 挑战描述 | 示例 |
| — | — |
| 视角变化 | 同一物体可能有不同的方向 |
| 尺度和光照变化 | 物体的大小和像素级的光照水平可能不同 |
| 变形/扭曲和类内变化 | 非刚体可能会有很大的变形,同一类中可能有不同外观的物体 |
| 遮挡 | 感兴趣的物体可能只有一小部分可见 |
| 背景杂乱 | 物体可能融入其环境,难以识别 |
4.4 感知机 - 单个人工神经元
1943年,受生物神经元的启发,McCulloch和Pitts引入了感知机作为人工神经元的概念,它是人工神经网络的基本构建块。生物神经元有树突接收信号、细胞体处理信号、轴突/轴突末梢向其他神经元传输信号。类似地,人工神经元有多个输入通道来接受表示为向量的训练样本,以及一个处理阶段,在该阶段调整权重(w),以使输出误差(实际值与预测值)最小化,然后将结果输入激活函数以产生输出,例如分类标签。对于分类问题,激活函数是一个阈值(标准为0.5),高于该阈值的类别为1,否则为0。
4.5 感知机代码示例
# import sklearn.linear_model.perceptron
from sklearn.linear_model import perceptron
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
# Let's use sklearn make_classification function to create some test data.
from sklearn.datasets import make_classification
X, y = make_classification(20, 2, 2, 0, weights=[.5, .5], random_state=2017)
# Create the model
clf = perceptron.Perceptron(n_iter=100, verbose=0, random_state=2017, fit_intercept=True, eta0=0.002)
clf.fit(X,y)
print "Prediction: " + str(clf.predict(X))
print "Actual: " + str(y)
print "Accuracy: " + str(clf.score(X, y)*100) + "%"
# Output the values
print "X1 Coefficient: " + str(clf.coef_[0,0])
print "X2 Coefficient: " + str(clf.coef_[0,1])
print "Intercept: " + str(clf.intercept_)
# Plot the decision boundary using cusom function ‘plot_decision_regions’
plot_decision_regions(X, y, classifier=clf)
plt.title('Perceptron Model Decision Boundry')
plt.xlabel('X1')
plt.ylabel('X2')
plt.legend(loc='upper left')
plt.show()
#----output----
Prediction: [1 1 1 0 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 1]
Actual: [1 1 1 0 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 1]
Accuracy: 100.0%
X1 Coefficient: 0.00575308754305
X2 Coefficient: 0.00107517941422
Intercept: [-0.002]
4.6 感知机的局限性
单个感知机方法的一个缺点是它只能学习线性可分的函数。
5. 卷积神经网络(CNN)基础
5.1 卷积神经网络概述
卷积神经网络(Convolutional Neural Network,CNN)是深度学习中一种非常重要的神经网络结构,特别适用于处理具有网格结构的数据,如图像、音频等。CNN通过卷积层、池化层和全连接层等组件,能够自动提取数据中的特征,减少了人工特征工程的工作量。
5.2 CNN的主要组件
- 卷积层(Convolutional Layer) :卷积层是CNN的核心组件,它使用一组可学习的卷积核(滤波器)对输入数据进行卷积操作,提取数据中的局部特征。卷积操作可以有效地捕捉数据的空间特征,并且具有平移不变性。
- 池化层(Pooling Layer) :池化层通常紧跟在卷积层之后,用于减少特征图的尺寸,降低计算量,同时增强模型的鲁棒性。常见的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling)。
- 全连接层(Fully Connected Layer) :全连接层位于CNN的最后几层,将前面卷积层和池化层提取的特征进行整合,输出最终的分类或回归结果。
5.3 CNN的工作流程
下面是CNN处理图像数据的基本工作流程:
graph LR
A[输入图像] --> B[卷积层]
B --> C[激活函数]
C --> D[池化层]
D --> E[重复卷积和池化]
E --> F[全连接层]
F --> G[输出结果]
5.4 CNN代码示例
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# 创建一个简单的CNN模型
model = Sequential()
# 添加卷积层
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
# 添加池化层
model.add(MaxPooling2D((2, 2)))
# 添加卷积层
model.add(Conv2D(64, (3, 3), activation='relu'))
# 添加池化层
model.add(MaxPooling2D((2, 2)))
# 展平特征图
model.add(Flatten())
# 添加全连接层
model.add(Dense(64, activation='relu'))
# 添加输出层
model.add(Dense(10, activation='softmax'))
# 编译模型
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 打印模型结构
model.summary()
5.5 CNN的应用领域
CNN在计算机视觉领域有广泛的应用,包括但不限于以下几个方面:
-
图像分类
:对图像进行分类,如识别猫、狗、汽车等。
-
目标检测
:在图像中检测出目标物体的位置和类别。
-
语义分割
:将图像中的每个像素分配到不同的类别中。
-
人脸识别
:识别图像中的人脸身份。
6. 深度学习中的优化算法
6.1 优化算法的作用
在深度学习中,优化算法的作用是调整模型的参数,使得模型的损失函数最小化。常见的损失函数有交叉熵损失(Cross Entropy Loss)、均方误差损失(Mean Squared Error Loss)等。优化算法通过不断迭代更新模型的参数,使得模型的性能不断提高。
6.2 常见的优化算法
- 随机梯度下降(Stochastic Gradient Descent,SGD) :SGD是最基本的优化算法,它每次迭代只使用一个样本或一小批样本计算梯度,并更新模型的参数。SGD的优点是计算效率高,但收敛速度较慢,容易陷入局部最优解。
- 动量随机梯度下降(Momentum SGD) :动量随机梯度下降在SGD的基础上引入了动量项,使得梯度更新具有一定的惯性,能够加快收敛速度,减少震荡。
- Adagrad :Adagrad算法根据每个参数的历史梯度信息,自适应地调整每个参数的学习率。对于频繁更新的参数,学习率会逐渐减小;对于不频繁更新的参数,学习率会相对较大。
- Adadelta :Adadelta是Adagrad的改进算法,它解决了Adagrad学习率逐渐减小的问题,通过使用指数移动平均来计算梯度的累积平方和。
- Adam :Adam结合了动量随机梯度下降和Adagrad的优点,它同时使用了梯度的一阶矩估计和二阶矩估计,自适应地调整每个参数的学习率。Adam在实际应用中表现良好,是目前最常用的优化算法之一。
6.3 优化算法的选择
不同的优化算法适用于不同的场景,以下是一些选择优化算法的建议:
| 优化算法 | 适用场景 |
| — | — |
| SGD | 数据量较小,对收敛速度要求不高 |
| 动量SGD | 数据量较大,需要加快收敛速度 |
| Adagrad | 数据稀疏,需要自适应调整学习率 |
| Adadelta | 解决Adagrad学习率逐渐减小的问题 |
| Adam | 大多数场景下都适用,表现较为稳定 |
6.4 优化算法代码示例
from keras.optimizers import SGD, Adam
# 使用SGD优化器
sgd = SGD(lr=0.01, momentum=0.9)
model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy'])
# 使用Adam优化器
adam = Adam(lr=0.001)
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])
7. 循环神经网络(RNN)基础
7.1 循环神经网络概述
循环神经网络(Recurrent Neural Network,RNN)是一种专门用于处理序列数据的神经网络结构,如文本、语音等。RNN通过在网络中引入循环结构,使得网络能够记忆序列中的历史信息,从而对当前时刻的输入进行处理。
7.2 RNN的结构和原理
RNN的基本结构包含一个输入层、一个隐藏层和一个输出层,隐藏层的输出会反馈到自身,形成循环。在每个时间步,RNN接收一个输入,并结合上一个时间步的隐藏状态,更新当前时间步的隐藏状态,然后输出结果。
7.3 RNN的代码示例
from keras.models import Sequential
from keras.layers import SimpleRNN, Dense
# 创建一个简单的RNN模型
model = Sequential()
# 添加RNN层
model.add(SimpleRNN(32, input_shape=(10, 20)))
# 添加全连接层
model.add(Dense(1, activation='sigmoid'))
# 编译模型
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
# 打印模型结构
model.summary()
7.4 RNN的局限性
传统的RNN存在梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)的问题,导致模型难以学习长序列中的信息。为了解决这些问题,人们提出了一些改进的RNN结构,如长短期记忆网络(LSTM)和门控循环单元(GRU)。
7.5 改进的RNN结构
- 长短期记忆网络(LSTM) :LSTM通过引入门控机制,能够有效地解决梯度消失和梯度爆炸的问题,更好地学习长序列中的信息。
- 门控循环单元(GRU) :GRU是LSTM的简化版本,它同样具有门控机制,但参数数量较少,计算效率更高。
8. 强化学习基础
8.1 强化学习概述
强化学习(Reinforcement Learning,RL)是一种通过智能体(Agent)与环境进行交互,根据环境反馈的奖励信号来学习最优行为策略的机器学习方法。强化学习在机器人控制、游戏、自动驾驶等领域有广泛的应用。
8.2 强化学习的基本概念
- 智能体(Agent) :智能体是在环境中执行动作的主体,它根据当前的状态选择合适的动作。
- 环境(Environment) :环境是智能体所处的外部世界,它接收智能体的动作,并返回下一个状态和奖励信号。
- 状态(State) :状态表示环境在某一时刻的特征,智能体根据状态来选择动作。
- 动作(Action) :动作是智能体在某一状态下采取的行为。
- 奖励(Reward) :奖励是环境对智能体动作的反馈,用于评估动作的好坏。智能体的目标是最大化累积奖励。
8.3 强化学习的基本流程
下面是强化学习的基本流程:
graph LR
A[智能体] --> B[选择动作]
B --> C[环境]
C --> D[返回下一个状态和奖励]
D --> A
8.4 常见的强化学习算法
- Q - learning :Q - learning是一种基于值函数的强化学习算法,它通过学习Q值(状态 - 动作值函数)来找到最优策略。
- 深度Q网络(Deep Q - Network,DQN) :DQN是Q - learning的扩展,它使用深度神经网络来近似Q值函数,能够处理高维状态空间。
- 策略梯度算法(Policy Gradient Algorithm) :策略梯度算法直接学习策略函数,通过优化策略函数的参数来最大化累积奖励。
8.5 强化学习代码示例
import numpy as np
import gym
# 创建一个OpenAI Gym环境
env = gym.make('CartPole-v1')
# 初始化Q表
Q = np.zeros([env.observation_space.n, env.action_space.n])
# 训练参数
alpha = 0.1
gamma = 0.9
episodes = 1000
for episode in range(episodes):
state = env.reset()
done = False
while not done:
# 选择动作
action = np.argmax(Q[state, :] + np.random.randn(1, env.action_space.n) * (1. / (episode + 1)))
# 执行动作
next_state, reward, done, _ = env.step(action)
# 更新Q表
Q[state, action] = (1 - alpha) * Q[state, action] + alpha * (reward + gamma * np.max(Q[next_state, :]))
state = next_state
# 测试模型
state = env.reset()
done = False
while not done:
action = np.argmax(Q[state, :])
state, reward, done, _ = env.step(action)
env.render()
env.close()
综上所述,我们介绍了文本挖掘中的Word2Vec模型、推荐系统的两种主要类型、多种深度学习库、人工神经网络基础、卷积神经网络、优化算法、循环神经网络和强化学习的基础知识。这些技术在不同的领域都有广泛的应用,希望通过本文的介绍,能够帮助读者更好地理解和应用这些技术。
超级会员免费看
1237

被折叠的 条评论
为什么被折叠?



