机器学习中预训练和预构建模型的力量和潜力

2024年01月15日 由 alex 发表 269 0

介绍


预训练和预构建模型的到来已经彻底改变了机器学习(ML)和人工智能(AI)领域。这些模型经过大型数据集的预先训练,为技术领域打开了新的大门,使复杂的任务用惊人的效率变得可实现。本文深入探讨了预训练模型的概念及其优势、挑战,以及它们在不同领域中的影响。


7


了解预训练和预构建模型


预训练模型本质上是已经在大型数据集上进行训练,以解决特定类型问题的机器学习模型。这些模型随后可供他人使用,无论是用于类似的任务,还是作为更专业任务的起点。预构建模型的概念与迁移学习方法一致,即将解决一个问题时获得的知识应用到不同但相关的问题上。


预训练和预构建模型指的是那些已经在大型数据集上训练过,且可用于特定任务或进一步在更专业数据集上微调的机器学习模型。这些模型节省了时间和资源,因为用户无需从头开始开发模型。它们在自然语言处理、计算机视觉和语音识别等领域特别有用。示例包括用于文本的BERT和GPT模型,以及用于图像的ResNet和YOLO模型。它们可以应用于语言翻译、情绪分析、图像识别和物体检测等多种应用。


预训练模型的优势


  1. 时间和资源效率:从零开始训练模型需要大量的计算资源和时间。预训练模型提供了一种捷径,允许开发者和研究人员利用现有模型,而无需承担从头开始训练的开销。
  2. 可进入性:它们使高级机器学习技术更易于获得,特别是对于那些可能没有资源训练大型模型的小型组织和个人开发者。
  3. 性能:通常,这些模型在广泛和多样化的数据集上进行训练,这在复杂的任务中,如图像和语音识别,可以导致更好的性能。


应用于不同的领域


  1. 自然语言处理(NLP):BERT和GPT这类模型在NLP领域设立了新的基准,使语言翻译、文本生成和情绪分析等方面的进展成为可能。
  2. 计算机视觉:ResNet和YOLO这类模型在图像识别、物体检测,甚至复杂任务如自动驾驶方面发挥了关键作用。
  3. 医疗保健:预训练模型被用于辅助诊断、预测病人结果和分析医学影像。


挑战和考虑事项


  1. 数据偏差和概括性:特定数据集上训练的模型可能不会很好地推广到其他类型的数据,导致在一些应用中出现偏差和不准确。
  2. 调优的资源强度:尽管预训练模型减少了大量训练的需求,但将它们针对特定任务进行调优仍然可能是资源密集型的。
  3. 过度依赖和缺乏理解:过度依赖这些模型而不深入理解其内部工作原理的风险,可能导致误用或错误解读它们的输出。


代码


用Python代码创建一个使用预训练和预构建模型的完整示例,包括使用一个合成数据集和绘图,涉及几个步骤。我们将使用像TensorFlow或PyTorch这样的常见机器学习库,以及NumPy和Matplotlib等库来生成数据集和绘图。


以下示例展示了一个简单用例:使用预训练的卷积神经网络(CNN)模型分类合成数据集。我们将生成一个图像合成数据集,使用预训练模型进行特征提取,然后在其上训练一个简单的分类器。


注:此示例仅用于说明目的。因为预训练模型是在真实世界图像上训练的,所以在合成数据上模型的性能可能不是最佳。


import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.applications import VGG16
from tensorflow.keras.utils import to_categorical
# Load a pretrained model (VGG16) without the top layer (classifier)
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(32, 32, 3))
# Freeze the layers of the base model
for layer in base_model.layers:
    layer.trainable = False
# Load CIFAR-10 dataset as a synthetic dataset example
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
# Normalizing data
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255
# Convert labels to one-hot encoding
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
# Create a new model with the pretrained base and a new classifier
model = Sequential([
    base_model,
    Flatten(),
    Dense(256, activation='relu'),
    Dense(10, activation='softmax')
])
# Compile the model
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Train the model
history = model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test))
# Plotting the training results
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'], label='Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.title('Model Accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()
plt.subplot(1, 2, 2)
plt.plot(history.history['loss'], label='Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.title('Model Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.show()


  1. 预训练模型:我们使用了VGG16,一个在ImageNet上预训练过的流行的卷积神经网络。
  2. 合成数据集:CIFAR-10被用作合成数据集的一个例子。它包括10个类别中的60,000张32x32的彩色图像。
  3. 模型训练:该模型由用于特征提取的VGG16基础部分和一个新的分类器(几个密集层)构成。然后我们在CIFAR-10数据上训练这个模型。
  4. 绘图:我们绘制训练和验证的准确率和损失图,以直观展现学习过程。


Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5
58889256/58889256 [==============================] - 2s 0us/step
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170498071/170498071 [==============================] - 4s 0us/step
Epoch 1/5
1563/1563 [==============================] - 1035s 660ms/step - loss: 1.3425 - accuracy: 0.5298 - val_loss: 1.2322 - val_accuracy: 0.5684
Epoch 2/5
1563/1563 [==============================] - 979s 627ms/step - loss: 1.1692 - accuracy: 0.5898 - val_loss: 1.1761 - val_accuracy: 0.5900
Epoch 3/5
1563/1563 [==============================] - 777s 497ms/step - loss: 1.1056 - accuracy: 0.6113 - val_loss: 1.1611 - val_accuracy: 0.5925
Epoch 4/5
1563/1563 [==============================] - 780s 499ms/step - loss: 1.0540 - accuracy: 0.6303 - val_loss: 1.1433 - val_accuracy: 0.6009
Epoch 5/5
1563/1563 [==============================] - 1063s 680ms/step - loss: 1.0128 - accuracy: 0.6454 - val_loss: 1.1214 - val_accuracy: 0.6125


8


需求:


要运行这段代码,你需要在你的Python环境中安装TensorFlow、NumPy和Matplotlib。这段代码是一个基本示例,可能需要调整或改进才能用于现实世界的应用。


结论


预训练和预构建模型是当前机器学习和人工智能领域的基石。它们已经使广大人群能够接触到先进技术,使各种各样的应用能够横跨不同的领域。然而,解决与它们使用相关的挑战是至关重要的,包括偏见问题以及需要专门微调的需求。随着该领域的发展,预期这些模型将变得更加高效、强大和多样化,从而进一步转变技术格局,并在人工智能应用中开拓新领域。

文章来源:https://medium.com/the-modern-scientist/the-power-and-potential-of-pretrained-and-prebuilt-models-in-machine-learning-4d4948a62a28
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消