본문 바로가기
728x90

Artificial Intelligence28

Neural Networks in Practice: Overfitting(과적합) 이미지 설명 Underfitting: 데이터 포인트와 단순 선형 모델이 그려져 있다. Overfitting: 데이터 포인트와 적절한 복잡성의 모델이 그려져 있다. Ideal fit: 데이터 포인트와 적절한 복잡성의 모델이 그려져 있다. 신경망 확률적 경사 하강법으로 최적화할 때 우리는 과적합이라는 문제에 직면한다. 과적합은 모델이 훈련 데이터의 패턴을 너무 정확하게 학습하여 테스트 데이터에 일반화되지 못하는 현상이다. Underfitting(과소적합) - 간단한 선형 모델이 훈련 데이터에 잘 맞지 않는 것을 보여준다. 이는 데이터가 선형적이 아니기 때문이다. Overfitting(과적합) - 너무 복잡한 모델이 훈련 데이터의 모든 잡음까지 학습하여 테스트 데이터에 일반화되지 못하는 것을 보여준다. Ide.. 2024. 1. 19.
Neural Network in Practice: Mini-batches Gradient Descent(경사 하강법) 경사 하강법 알고리즘으로 가중치가 업데이트되고 있는 과정을 나타내고 있다. 이미지 오른쪽을 보면 그래프를 확인 할 수 있는데 그래프의 빨간색 부분을 목적지라고 하고 그것을 산의 정상이라고 한다면, 현재 자신의 위치에서 가장 경사가 높은 곳으로 계속 이동하다 보면 일반적으로 산의 정상에 도달할 수 있을 것이다. 이 방법을 경사 상승법이라고 한다. 그리고 목적지가 산 밑이라면 현재 위치에서 계속해서 가장 낮은 지점을 찾아 이동한다. 이것을 경사 하강법이라고 한다. 일반적으로 경사 하강법은 함수의 최소값을 찾아야 하는 상황에서 사용된다. 인공 지능의 경우 최적의 학습 패턴을 위해 자신의 파라미터(Perameter)를 검증해야 하며 검증 과정에서 손실 함수를 사용한다.. 2024. 1. 13.
Neural Network in Practice: Optimization(실제 신경망: 최적화) 전에 설명했던 신경망 훈련의 핵심 알고리즘인 역전파 알고리즘에 대해 다시 정리하자면 손실 함수의 기울기를 계산하여 가중치를 업데이트하고, 체인 룰을 반복적으로 적용하여 효과적으로 기울기를 계산한다. 실제 신경망 훈련의 복잡성은 경사하강법만 사용하지 않고, 실제로는 더 복잡한 최적화 기법과 알고리즘을 사용한다. 딥 뉴런망은 매개변수 수가 많고 가중치 공간이 매우 차원이 높다. 훈련 복잡성에 대한 몇 가지 예시 vanishing gradient: 기울기가 지나치게 작아져 학습이 느려지거나 막힐 수 있다. exploding gradient: 기울기가 지나치게 커져 가중치가 불안정하게 업데이트될 수 있다. saddle points: 국소 최소점에 빠져 최적 해결책을 찾지 못할 수 있다. overfitting: .. 2024. 1. 11.
텐서 조작하기(3) 1. 뷰(view) - 원소의 수를 유지하면서 텐서의 크기 변경 파이토치 텐서의 뷰(view)는 Reshape라는 이름에서 알 수 있듯이, 텐서의 크기를 변경해 주는 역할을 한다. import numpy as np import torch ft라는 이름의 3차원 텐서를 만들었습니다. 크기(shape)를 확인해 보자. t=np.array([[[0,1,2], [3,4,5]], [[6,7,8], [9,10,11]]]) ft=torch.FloatTensor(t) #3차원 텐서를 만들었다. ft의 크기를 기억하자 print(ft.shape) # torch.Size([2, 2, 3]) 1) 3차원 텐서에서 2차원 텐서로 변경 view([-1, 3])이 가지는 의미는 -1은 첫 번째 차원은 사용자가 잘 모르겠으니 파이.. 2024. 1. 10.
역전파 알고리즘(Backpropagation algorithm) 앞에서 설명한 다층 퍼셉트론 같은 깊은 신경망이 등장한 후 선형으로 가능하지 않은 데이터들을 분류하는 것이 가능해졌다. 하지만 모델의 깊이가(depth)가 깊어질수록, 즉 모델의 층이 많아질수록 모델의 가중치의 수는 기하급수적으로 많이 늘어난. 기존의 경사하강법은 기울기를 이용하여 가중치를 업데이트하는 방법을 사용하긴 하지만, 여러 층에 존재하는 가중치들을 모두 하나하나 업데이트하는 것은 매우 많은 연산양과 메모리를 요구한다. 이를 해결하고자 보안된 것이 역전파 알고리즘이다. 위의 이미지는 입력 하나, 출력 하나, 뉴런 하나로 구성된 가장 단순한 신경망을 보여준다. 왼쪽부터 입력(x), 가중치(w1과 w2), 뉴런의 출력(y), 손실 함수(L)로 구성되어 있다. 우리의 목표는 손실 함수(L)를 최소화하기.. 2024. 1. 5.
텐서 조작하기(2) 넘파이로 텐서 만들기(벡터와 행렬 만들기) 우선 numpy를 임포트 합니다. import numpy as np 1차원 벡터를 만들어주고 벡터의 차원과 크기도 출력해 줍니다. #numpy로 1차원 텐서인 벡터를 만들어준다. t = np.array([0.,1.,2.,3.,4.,5.]) print(t) print('Rank of t: ', t.ndim)#.ndim 몇차원인지 알려준다. 1차원 벡터 print('Shape of t: ', t.shape) #.shape 크기를 알려준다. 총 6개의 벡터 # [0. 1. 2. 3. 4. 5.] # Rank of t: 1 # Shape of t: (6,) - 텐서의 크기(shape)를 표현할 때는, 1차원은 벡터, 2차원은 행렬, 3차원은 3차원 텐서라고 부른다. 현.. 2024. 1. 3.
728x90