목차
Prompt
데이터 증류
커리큘럼/적극적 훈련
Maximally Interfered Retrieval
검색 증강
기술 주변기기 일체 포함 지속적인 학습을 위한 6가지 일반적인 방법 요약: 이전 데이터의 성능을 유지하면서 ML 모델을 새로운 데이터에 적용

지속적인 학습을 위한 6가지 일반적인 방법 요약: 이전 데이터의 성능을 유지하면서 ML 모델을 새로운 데이터에 적용

Apr 11, 2023 pm 11:25 PM
기계 학습 ml 모델 지속적인 학습

지속 학습은 이전 작업에서 얻은 지식을 잊지 않고 많은 수의 작업을 순차적으로 학습하는 모델을 말합니다. 지도 학습에서는 기계 학습 모델이 주어진 데이터 세트 또는 데이터 분포에 가장 적합한 기능이 되도록 훈련되기 때문에 이는 중요한 개념입니다. 실제 환경에서 데이터는 정적인 경우가 거의 없으며 변경될 수 있습니다. 일반적인 ML 모델은 보이지 않는 데이터에 직면할 때 성능 저하를 겪을 수 있습니다. 이러한 현상을 파국적 망각이라고 합니다.

지속적인 학습을 위한 6가지 일반적인 방법 요약: 이전 데이터의 성능을 유지하면서 ML 모델을 새로운 데이터에 적용

이런 종류의 문제를 해결하는 일반적인 방법은 이전 데이터와 새 데이터가 포함된 새로운 대규모 데이터 세트에서 전체 모델을 재교육하는 것입니다. 그러나 이 접근 방식은 비용이 많이 드는 경우가 많습니다. 그래서 이 문제를 살펴보고 있는 ML 연구 분야가 있습니다. 이 분야의 연구를 바탕으로, 이 기사에서는 모델이 이전 성능을 유지하면서 새로운 데이터에 적응하고 수행할 필요를 피할 수 있는 6가지 방법을 논의할 것입니다. 재교육할 전체 데이터 세트(기존 + 신규)

Prompt

Prompt 이 아이디어는 GPT 3의 힌트(짧은 단어 시퀀스)가 모델이 더 나은 추론과 답변을 유도하는 데 도움이 될 수 있다는 아이디어에서 비롯되었습니다. 따라서 이 문서에서는 Prompt가 프롬프트로 번역됩니다. 힌트 조정은 학습 가능한 작은 힌트를 사용하여 실제 입력과 함께 모델에 입력으로 제공하는 것을 의미합니다. 이를 통해 모델 가중치를 다시 학습할 필요 없이 새 데이터에 대한 힌트를 제공하는 작은 모델만 학습할 수 있습니다.

구체적으로 저는 Wang의 기사 "지속 학습을 위한 프롬프트 학습"에서 채택한 텍스트 기반 집중 검색을 위한 프롬프트를 사용하는 예를 선택했습니다.

논문의 저자는 다음 다이어그램을 사용하여 아이디어를 설명합니다.

지속적인 학습을 위한 6가지 일반적인 방법 요약: 이전 데이터의 성능을 유지하면서 ML 모델을 새로운 데이터에 적용

실제 인코딩된 텍스트 입력은 힌트 풀에서 가장 작은 일치 쌍을 식별하는 키로 사용됩니다. 이렇게 식별된 단서는 모델에 입력되기 전에 먼저 인코딩되지 않은 텍스트 임베딩에 추가됩니다. 이것의 목적은 이전 모델을 변경하지 않고 유지하면서 이러한 단서를 훈련하여 새로운 작업을 나타내는 것입니다. 단서는 프롬프트당 20개의 토큰으로 매우 작습니다.

class PromptPool(nn.Module):
def __init__(self, M = 100, hidden_size = 768, length = 20, N=5):
super().__init__()
self.pool = nn.Parameter(torch.rand(M, length, hidden_size), requires_grad=True).float()
self.keys = nn.Parameter(torch.rand(M, hidden_size), requires_grad=True).float()
 
self.length = length
self.hidden = hidden_size
self.n = N
 
nn.init.xavier_normal_(self.pool)
nn.init.xavier_normal_(self.keys)
 
def init_weights(self, embedding):
pass
 
# function to select from pool based on index
def concat(self, indices, input_embeds):
subset = self.pool[indices, :] # 2, 2, 20, 768
 
subset = subset.to("cuda:0").reshape(indices.size(0),
self.n*self.length,
self.hidden) # 2, 40, 768
 
return torch.cat((subset, input_embeds), 1)
 
# x is cls output
def query_fn(self, x):
 
# encode input x to same dim as key using cosine
x = x / x.norm(dim=1)[:, None]
k = self.keys / self.keys.norm(dim=1)[:, None]
 
scores = torch.mm(x, k.transpose(0,1).to("cuda:0"))
 
# get argmin
subsets = torch.topk(scores, self.n, 1, False).indices # k smallest
 
return subsets
 
 pool = PromptPool()
로그인 후 복사

그런 다음 훈련된 기존 데이터 모델을 사용하여 새 데이터를 훈련합니다. 여기서는 프롬프트 부분의 가중치만 훈련합니다.

def train():
count = 0
print("*********** Started Training *************")
 
start = time.time()
for epoch in range(40):
model.eval()
pool.train()
 
optimizer.zero_grad(set_to_none=True)
lap = time.time()
 
for batch in iter(train_dataloader):
count += 1
q, p, train_labels = batch
 
queries_emb = model(input_ids=q['input_ids'].to("cuda:0"),
attention_mask=q['attention_mask'].to("cuda:0"))
passage_emb = model(input_ids=p['input_ids'].to("cuda:0"),
attention_mask=p['attention_mask'].to("cuda:0"))
 
# pool
q_idx = pool.query_fn(queries_emb)
raw_qembedding = model.model.embeddings(input_ids=q['input_ids'].to("cuda:0"))
q = pool.concat(indices=q_idx, input_embeds=raw_qembedding)
 
p_idx = pool.query_fn(passage_emb)
raw_pembedding = model.model.embeddings(input_ids=p['input_ids'].to("cuda:0"))
p = pool.concat(indices=p_idx, input_embeds=raw_pembedding)
 
qattention_mask = torch.ones(batch_size, q.size(1))
pattention_mask = torch.ones(batch_size, p.size(1))
 
queries_emb = model.model(inputs_embeds=q,
attention_mask=qattention_mask.to("cuda:0")).last_hidden_state
passage_emb = model.model(inputs_embeds=p,
attention_mask=pattention_mask.to("cuda:0")).last_hidden_state
 
q_cls = queries_emb[:, pool.n*pool.length+1, :]
p_cls = passage_emb[:, pool.n*pool.length+1, :]
 
loss, ql, pl = calc_loss(q_cls, p_cls)
loss.backward()
 
optimizer.step()
optimizer.zero_grad(set_to_none=True)
 
if count % 10 == 0:
print("Model Loss:", round(loss.item(),4), 
"| QL:", round(ql.item(),4), "| PL:", round(pl.item(),4), 
"| Took:", round(time.time() - lap), "secondsn")
 
lap = time.time()
 
if count % 40 == 0 and count > 0:
print("model saved")
torch.save(model.state_dict(), model_PATH)
torch.save(pool.state_dict(), pool_PATH)
 
if count == 4600: return
 
print("Training Took:", round(time.time() - start), "seconds")
print("n*********** Training Complete *************")
로그인 후 복사

훈련이 완료된 후 후속 추론 프로세스에서는 입력을 검색된 힌트와 결합해야 합니다. 예를 들어, 이 예에서는 새 데이터 힌트 풀의 경우 93%, 전체(이전 + 새) 교육의 경우 94%의 성능을 얻었습니다. 이는 원문에서 언급한 성능과 유사하다. 하지만 주의할 점은 작업에 따라 결과가 달라질 수 있으므로 실험을 통해 무엇이 가장 효과적인지 알아내야 한다는 것입니다.

이 방법을 고려해 볼 가치가 있으려면 이전 데이터에서 이전 모델의 성능을 80% 이상 보존할 수 있어야 하며, 힌트는 모델이 새 데이터에서 좋은 성능을 달성하는 데도 도움이 되어야 합니다.

이 방법의 단점은 힌트 풀을 사용해야 하므로 시간이 더 걸린다는 것입니다. 이는 영구적인 해결책은 아니지만 현재로서는 가능하며 아마도 미래에는 새로운 방법이 등장할 수도 있습니다.

데이터 증류

지식 증류라는 용어를 들어보셨을 것입니다. 이는 교사 모델의 가중치를 사용하여 소규모 모델을 안내하고 훈련시키는 기술입니다. 데이터 증류(Data Distillation)도 유사하게 작동합니다. 실제 데이터의 가중치를 사용하여 데이터의 더 작은 하위 집합을 훈련합니다. 데이터 세트의 주요 신호는 더 작은 데이터 세트로 정제되고 압축되므로 새로운 데이터에 대한 교육에는 이전 성능을 유지하기 위해 일부 정제된 데이터만 제공하면 됩니다.

이 예에서는 밀도가 높은 검색(텍스트) 작업에 데이터 증류를 적용합니다. 현재 이 분야에서는 이 방법을 사용하는 사람이 없기 때문에 결과가 가장 좋지 않을 수 있지만 텍스트 분류에 이 방법을 사용하면 좋은 결과를 얻을 수 있습니다.

본질적으로 텍스트 데이터 증류의 아이디어는 Li의 Data Distillation for Text Classification이라는 제목의 논문에서 시작되었습니다. 이 논문은 Wang의 Dataset Distillation에서 영감을 받아 이미지 데이터를 증류했습니다. Li는 다음 다이어그램을 사용하여 텍스트 데이터 증류 작업을 설명합니다.

지속적인 학습을 위한 6가지 일반적인 방법 요약: 이전 데이터의 성능을 유지하면서 ML 모델을 새로운 데이터에 적용

논문에 따르면 증류된 데이터 배치가 먼저 모델에 공급되어 가중치를 업데이트합니다. 그런 다음 업데이트된 모델은 실제 데이터를 사용하여 평가되고 신호는 증류된 데이터 세트로 역전파됩니다. 이 논문은 8개의 공개 벤치마크 데이터 세트에 대한 우수한 분류 결과(>80% 정확도)를 보고합니다.

제안된 아이디어에 따라 약간의 변경을 가하고 일련의 증류된 데이터와 여러 개의 실제 데이터를 사용했습니다. 다음은 집중 검색 훈련을 위한 증류 데이터를 생성하는 코드입니다.

class DistilledData(nn.Module):
def __init__(self, num_labels, M, q_len=64, hidden_size=768):
super().__init__()
self.num_samples = M
self.q_len = q_len
self.num_labels = num_labels
self.data = nn.Parameter(torch.rand(num_labels, M, q_len, hidden_size), requires_grad=True) # i.e. shape: 1000, 4, 64, 768
 
# init using model embedding, xavier, or load from state dict
def init_weights(self, model, path=None):
if model:
self.data.requires_grad = False
print("Init weights using model embedding")
raw_embedding = model.model.get_input_embeddings()
soft_embeds = raw_embedding.weight[:, :].clone().detach()
nums = soft_embeds.size(0)
for i1 in range(self.num_labels):
for i2 in range(self.num_samples):
for i3 in range(self.q_len):
random_idx = random.randint(0, nums-1)
self.data[i1, i2, i3, :] = soft_embeds[random_idx, :]
print(self.data.shape)
self.data.requires_grad = True
 
if not path:
nn.init.xavier_normal_(self.data)
else:
distilled_data.load_state_dict(torch.load(path), strict=False)
 
# function to sample a passage and positive sample as in the article, i am doing dense retrieval
def get_sample(self, label):
q_idx = random.randint(0, self.num_samples-1)
sampled_dist_q = self.data[label, q_idx, :, :]
 
p_idx = random.randint(0, self.num_samples-1)
while q_idx == p_idx:
p_idx = random.randint(0, self.num_samples-1)
sampled_dist_p = self.data[label, p_idx, :, :]
 
return sampled_dist_q, sampled_dist_p, q_idx, p_idx
로그인 후 복사

이것은 증류 데이터에 신호를 추출하는 코드입니다.

def distll_train(chunk_size=32):
count, times = 0, 0
print("*********** Started Training *************")
start = time.time()
lap = time.time()
 
for epoch in range(40):
distilled_data.train()
 
for batch in iter(train_dataloader):
count += 1
# get real query, pos, label, distilled data query, distilled data pos, ... from batch
q, p, train_labels, dq, dp, q_indexes, p_indexes = batch
 
for idx in range(0, dq['input_ids'].size(0), chunk_size):
model.train()
 
with torch.enable_grad():
# train on distiled data first
x1 = dq['input_ids'][idx:idx+chunk_size].clone().detach().requires_grad_(True)
x2 = dp['input_ids'][idx:idx+chunk_size].clone().detach().requires_grad_(True)
q_emb = model(inputs_embeds=x1.to("cuda:0"),
attention_mask=dq['attention_mask'][idx:idx+chunk_size].to("cuda:0")).cpu()
p_emb = model(inputs_embeds=x2.to("cuda:0"),
attention_mask=dp['attention_mask'][idx:idx+chunk_size].to("cuda:0"))
loss = default_loss(q_emb.to("cuda:0"), p_emb)
del q_emb, p_emb
 
loss.backward(retain_graph=True, create_graph=False)
state_dict = model.state_dict()
 
# update model weights
with torch.no_grad():
for idx, param in enumerate(model.parameters()):
if param.requires_grad and not param.grad is None:
param.data -= (param.grad*3e-5)
 
# real data
model.eval()
q_embs = []
p_embs = []
for k in range(0, len(q['input_ids']), chunk_size):
with torch.no_grad():
q_emb = model(input_ids=q['input_ids'][k:k+chunk_size].to("cuda:0"),).cpu()
p_emb = model(input_ids=p['input_ids'][k:k+chunk_size].to("cuda:0"),).cpu()
q_embs.append(q_emb)
p_embs.append(p_emb)
q_embs = torch.cat(q_embs, 0)
p_embs = torch.cat(p_embs, 0)
r_loss = default_loss(q_embs.to("cuda:0"), p_embs.to("cuda:0"))
del q_embs, p_embs
 
# distill backward
if count % 2 == 0:
d_grad = torch.autograd.grad(inputs=[x1.to("cuda:0")],#, x2.to("cuda:0")],
outputs=loss,
grad_outputs=r_loss)
indexes = q_indexes
else:
d_grad = torch.autograd.grad(inputs=[x2.to("cuda:0")],
outputs=loss,
grad_outputs=r_loss)
indexes = p_indexes
loss.detach()
r_loss.detach()
 
grads = torch.zeros(distilled_data.data.shape) # lbl, 10, 100, 768
for i, k in enumerate(indexes):
grads[train_labels[i], k, :, :] = grads[train_labels[i], k, :, :].to("cuda:0") 
+ d_grad[0][i, :, :]
distilled_data.data.grad = grads
data_optimizer.step()
data_optimizer.zero_grad(set_to_none=True)
 
model.load_state_dict(state_dict)
model_optimizer.step()
model_optimizer.zero_grad(set_to_none=True)
 
if count % 10 == 0:
print("Count:", count ,"| Data:", round(loss.item(), 4), "| Model:", 
round(r_loss.item(),4), "| Time:", round(time.time() - lap, 4))
# print()
lap = time.time()
 
if count % 100 == 0:
torch.save(model.state_dict(), model_PATH)
torch.save(distilled_data.state_dict(), distill_PATH)
 
if loss < 0.1 and r_loss < 1:
times += 1
 
if times > 100:
print("Training Took:", round(time.time() - start), "seconds")
print("n*********** Training Complete *************")
return
del loss, r_loss, grads, q, p, train_labels, dq, dp, x1, x2, state_dict
 
print("Training Took:", round(time.time() - start), "seconds")
print("n*********** Training Complete *************")
로그인 후 복사

여기에서는 증류 데이터를 훈련한 후 데이터 로딩과 같은 코드를 생략합니다. 이를 전달합니다. 예를 들어 새 데이터와 결합하여 새 모델을 사용하도록 교육합니다.

내 실험에 따르면 증류된 데이터(라벨당 4개의 샘플만 포함)로 훈련한 모델은 66%의 최고 성능을 얻었고, 원본 데이터로만 훈련한 모델도 66%의 최고 성능을 얻었습니다. 훈련되지 않은 일반 모델은 45%의 성능을 달성했습니다. 위에서 언급한 대로 이 숫자는 집중적인 검색 작업에는 적합하지 않을 수 있지만 범주형 데이터에는 훨씬 더 좋습니다.

모델을 새로운 데이터로 조정할 때 이 방법이 유용하려면 원본 데이터보다 훨씬 작은 데이터 세트(예: ~1%)를 추출할 수 있어야 합니다. 정제된 데이터는 능동적 학습 방법보다 약간 낮거나 같은 성능을 제공할 수도 있습니다.

이 방법의 장점은 영구적으로 사용할 수 있는 증류된 데이터를 생성할 수 있다는 것입니다. 단점은 추출된 데이터를 해석할 수 없고 추가적인 훈련 시간이 필요하다는 점입니다.

커리큘럼/적극적 훈련

커리큘럼 훈련은 훈련 중에 모델에 훈련 샘플을 제공하는 것이 점차 어려워지는 방법입니다. 새로운 데이터를 교육할 때 이 방법을 사용하려면 작업에 수동으로 레이블을 지정하고 작업을 쉬움, 중간, 어려움으로 분류한 다음 데이터를 샘플링해야 합니다. 모델이 쉬움, 중간, 어려움의 의미를 이해하기 위해 다음 그림을 예로 듭니다.

지속적인 학습을 위한 6가지 일반적인 방법 요약: 이전 데이터의 성능을 유지하면서 ML 모델을 새로운 데이터에 적용

이것은 분류 작업의 혼동 행렬입니다. 이는 모델을 참조하는 거짓 긍정입니다. 예측 True일 확률은 매우 높지만 실제로는 True인 표본이 아닙니다. 중간 샘플은 정확할 확률이 중간에서 높지만 예측 임계값보다 낮은 참음성인 샘플입니다. 단순 샘플은 참양성/음성 가능성이 낮은 샘플입니다.

Maximally Interfered Retrieval

Rahaf가 "Online Continual Learning with Maximally Interfered Retrieval"이라는 논문(1908.04742)에서 소개한 방법입니다. 주요 아이디어는 훈련되는 각각의 새로운 데이터 배치에 대해 최신 데이터에 대한 모델 가중치를 업데이트하는 경우 손실 값 측면에서 가장 큰 영향을 받는 이전 샘플을 식별해야 한다는 것입니다. 오래된 데이터로 구성된 제한된 크기의 메모리는 유지되며 가장 방해가 되는 샘플은 각각의 새로운 데이터 배치와 함께 검색되어 함께 훈련됩니다.

이 논문은 지속적인 학습 분야에서 확립된 논문이고 인용 횟수도 많기 때문에 귀하의 사례에 적용될 수 있습니다.

검색 증강

검색 증강은 컬렉션에서 항목을 검색하여 입력, 샘플 등을 증강하는 기술을 말합니다. 이는 특정 기술이라기보다는 일반적인 개념이다. 지금까지 논의한 대부분의 방법은 어느 정도 검색 관련 작업입니다. 검색 증강 언어 모델을 사용한 Few-shot Learning이라는 제목의 Izacard의 논문은 더 작은 모델을 사용하여 Few-shot 학습에서 뛰어난 성능을 달성합니다. 검색 향상은 단어 생성이나 사실 질문에 대한 답변과 같은 다른 많은 상황에서도 사용됩니다.

학습 중에 추가 레이어를 사용하도록 모델을 확장하는 것이 가장 일반적이고 간단한 방법이지만 반드시 효과적인 것은 아니므로 여기서는 Lewis의 Efficient Few-Shot Learning Without Prompts를 예로 들어 자세히 설명하지 않습니다. 추가 레이어를 사용하는 것은 기존 데이터와 새 데이터에서 우수한 성능을 얻기 위한 가장 간단하지만 시도되고 테스트된 방법인 경우가 많습니다. 주요 아이디어는 모델 가중치를 고정한 상태로 유지하고 분류 손실이 있는 새 데이터에 대해 하나 이상의 레이어를 훈련하는 것입니다.

요약 이번 글에서는 새로운 데이터로 모델을 훈련할 때 사용할 수 있는 6가지 방법을 소개했습니다. 항상 그렇듯이 어떤 방법이 가장 효과적인지 실험하고 결정해야 하지만 위에서 설명한 방법 외에도 많은 방법이 있다는 점에 유의하는 것이 중요합니다. 예를 들어 데이터 증류는 컴퓨터 비전에서 활발하게 사용되는 영역이며 이에 대한 많은 내용을 논문에서 찾을 수 있습니다. . 마지막 참고 사항: 이러한 방법이 유용하려면 이전 데이터와 새 데이터 모두에서 좋은 성능을 달성해야 합니다.

위 내용은 지속적인 학습을 위한 6가지 일반적인 방법 요약: 이전 데이터의 성능을 유지하면서 ML 모델을 새로운 데이터에 적용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

15가지 추천 오픈 소스 무료 이미지 주석 도구 15가지 추천 오픈 소스 무료 이미지 주석 도구 Mar 28, 2024 pm 01:21 PM

이미지 주석은 이미지 콘텐츠에 더 깊은 의미와 설명을 제공하기 위해 이미지에 레이블이나 설명 정보를 연결하는 프로세스입니다. 이 프로세스는 비전 모델을 훈련하여 이미지의 개별 요소를 보다 정확하게 식별하는 데 도움이 되는 기계 학습에 매우 중요합니다. 이미지에 주석을 추가함으로써 컴퓨터는 이미지 뒤의 의미와 맥락을 이해할 수 있으므로 이미지 내용을 이해하고 분석하는 능력이 향상됩니다. 이미지 주석은 컴퓨터 비전, 자연어 처리, 그래프 비전 모델 등 다양한 분야를 포괄하여 차량이 도로의 장애물을 식별하도록 지원하는 등 광범위한 애플리케이션을 보유하고 있습니다. 의료영상인식을 통한 질병진단. 이 기사에서는 주로 더 나은 오픈 소스 및 무료 이미지 주석 도구를 권장합니다. 1.마케센스

이 기사에서는 SHAP: 기계 학습을 위한 모델 설명을 이해하도록 안내합니다. 이 기사에서는 SHAP: 기계 학습을 위한 모델 설명을 이해하도록 안내합니다. Jun 01, 2024 am 10:58 AM

기계 학습 및 데이터 과학 분야에서 모델 해석 가능성은 항상 연구자와 실무자의 초점이었습니다. 딥러닝, 앙상블 방법 등 복잡한 모델이 널리 적용되면서 모델의 의사결정 과정을 이해하는 것이 특히 중요해졌습니다. explainable AI|XAI는 모델의 투명성을 높여 머신러닝 모델에 대한 신뢰와 확신을 구축하는 데 도움이 됩니다. 모델 투명성을 향상시키는 것은 여러 복잡한 모델의 광범위한 사용은 물론 모델을 설명하는 데 사용되는 의사 결정 프로세스와 같은 방법을 통해 달성할 수 있습니다. 이러한 방법에는 기능 중요도 분석, 모델 예측 간격 추정, 로컬 해석 가능성 알고리즘 등이 포함됩니다. 특성 중요도 분석은 모델이 입력 특성에 미치는 영향 정도를 평가하여 모델의 의사결정 과정을 설명할 수 있습니다. 모델 예측 구간 추정

학습 곡선을 통해 과적합과 과소적합 식별 학습 곡선을 통해 과적합과 과소적합 식별 Apr 29, 2024 pm 06:50 PM

이 글에서는 학습 곡선을 통해 머신러닝 모델에서 과적합과 과소적합을 효과적으로 식별하는 방법을 소개합니다. 과소적합 및 과적합 1. 과적합 모델이 데이터에 대해 과도하게 훈련되어 데이터에서 노이즈를 학습하는 경우 모델이 과적합이라고 합니다. 과적합된 모델은 모든 예를 너무 완벽하게 학습하므로 보이지 않거나 새로운 예를 잘못 분류합니다. 과대적합 모델의 경우 완벽/거의 완벽에 가까운 훈련 세트 점수와 형편없는 검증 세트/테스트 점수를 얻게 됩니다. 약간 수정됨: "과적합의 원인: 복잡한 모델을 사용하여 간단한 문제를 해결하고 데이터에서 노이즈를 추출합니다. 훈련 세트로 사용되는 작은 데이터 세트는 모든 데이터를 올바르게 표현하지 못할 수 있기 때문입니다."

투명한! 주요 머신러닝 모델의 원리를 심층적으로 분석! 투명한! 주요 머신러닝 모델의 원리를 심층적으로 분석! Apr 12, 2024 pm 05:55 PM

일반인의 관점에서 보면 기계 학습 모델은 입력 데이터를 예측된 출력에 매핑하는 수학적 함수입니다. 보다 구체적으로, 기계 학습 모델은 예측 출력과 실제 레이블 사이의 오류를 최소화하기 위해 훈련 데이터로부터 학습하여 모델 매개변수를 조정하는 수학적 함수입니다. 기계 학습에는 로지스틱 회귀 모델, 의사결정 트리 모델, 지원 벡터 머신 모델 등 다양한 모델이 있습니다. 각 모델에는 적용 가능한 데이터 유형과 문제 유형이 있습니다. 동시에, 서로 다른 모델 간에는 많은 공통점이 있거나 모델 발전을 위한 숨겨진 경로가 있습니다. 연결주의 퍼셉트론을 예로 들면, 퍼셉트론의 은닉층 수를 늘려 심층 신경망으로 변환할 수 있습니다. 퍼셉트론에 커널 함수를 추가하면 SVM으로 변환할 수 있다. 이 하나

우주탐사 및 인간정주공학 분야 인공지능의 진화 우주탐사 및 인간정주공학 분야 인공지능의 진화 Apr 29, 2024 pm 03:25 PM

1950년대에는 인공지능(AI)이 탄생했다. 그때 연구자들은 기계가 사고와 같은 인간과 유사한 작업을 수행할 수 있다는 것을 발견했습니다. 이후 1960년대에 미국 국방부는 인공 지능에 자금을 지원하고 추가 개발을 위해 실험실을 설립했습니다. 연구자들은 우주 탐사, 극한 환경에서의 생존 등 다양한 분야에서 인공지능의 응용 분야를 찾고 있습니다. 우주탐험은 지구를 넘어 우주 전체를 포괄하는 우주에 대한 연구이다. 우주는 지구와 조건이 다르기 때문에 극한 환경으로 분류됩니다. 우주에서 생존하려면 많은 요소를 고려해야 하며 예방 조치를 취해야 합니다. 과학자와 연구자들은 우주를 탐험하고 모든 것의 현재 상태를 이해하는 것이 우주가 어떻게 작동하는지 이해하고 잠재적인 환경 위기에 대비하는 데 도움이 될 수 있다고 믿습니다.

C++에서 기계 학습 알고리즘 구현: 일반적인 과제 및 솔루션 C++에서 기계 학습 알고리즘 구현: 일반적인 과제 및 솔루션 Jun 03, 2024 pm 01:25 PM

C++의 기계 학습 알고리즘이 직면하는 일반적인 과제에는 메모리 관리, 멀티스레딩, 성능 최적화 및 유지 관리 가능성이 포함됩니다. 솔루션에는 스마트 포인터, 최신 스레딩 라이브러리, SIMD 지침 및 타사 라이브러리 사용은 물론 코딩 스타일 지침 준수 및 자동화 도구 사용이 포함됩니다. 실제 사례에서는 Eigen 라이브러리를 사용하여 선형 회귀 알고리즘을 구현하고 메모리를 효과적으로 관리하며 고성능 행렬 연산을 사용하는 방법을 보여줍니다.

당신이 모르는 머신러닝의 5가지 학교 당신이 모르는 머신러닝의 5가지 학교 Jun 05, 2024 pm 08:51 PM

머신 러닝은 명시적으로 프로그래밍하지 않고도 컴퓨터가 데이터로부터 학습하고 능력을 향상시킬 수 있는 능력을 제공하는 인공 지능의 중요한 분야입니다. 머신러닝은 이미지 인식, 자연어 처리, 추천 시스템, 사기 탐지 등 다양한 분야에서 폭넓게 활용되며 우리의 삶의 방식을 변화시키고 있습니다. 기계 학습 분야에는 다양한 방법과 이론이 있으며, 그 중 가장 영향력 있는 5가지 방법을 "기계 학습의 5개 학교"라고 합니다. 5개 주요 학파는 상징학파, 연결주의 학파, 진화학파, 베이지안 학파, 유추학파이다. 1. 상징주의라고도 알려진 상징주의는 논리적 추론과 지식 표현을 위해 상징을 사용하는 것을 강조합니다. 이 사고 학교는 학습이 기존을 통한 역연역 과정이라고 믿습니다.

Flash Attention은 안정적인가요? Meta와 Harvard는 모델 중량 편차가 ​​수십 배로 변동한다는 사실을 발견했습니다. Flash Attention은 안정적인가요? Meta와 Harvard는 모델 중량 편차가 ​​수십 배로 변동한다는 사실을 발견했습니다. May 30, 2024 pm 01:24 PM

MetaFAIR는 대규모 기계 학습을 수행할 때 생성되는 데이터 편향을 최적화하기 위한 새로운 연구 프레임워크를 제공하기 위해 Harvard와 협력했습니다. 대규모 언어 모델을 훈련하는 데는 수개월이 걸리고 수백 또는 수천 개의 GPU를 사용하는 것으로 알려져 있습니다. LLaMA270B 모델을 예로 들면, 훈련에는 총 1,720,320 GPU 시간이 필요합니다. 대규모 모델을 교육하면 이러한 워크로드의 규모와 복잡성으로 인해 고유한 체계적 문제가 발생합니다. 최근 많은 기관에서 SOTA 생성 AI 모델을 훈련할 때 훈련 프로세스의 불안정성을 보고했습니다. 이는 일반적으로 손실 급증의 형태로 나타납니다. 예를 들어 Google의 PaLM 모델은 훈련 과정에서 최대 20번의 손실 급증을 경험했습니다. 수치 편향은 이러한 훈련 부정확성의 근본 원인입니다.

See all articles