소프트맥스(softmax) 다중 클래스 분류 문제에서 사용되는 활성화 함수. 주어진 입력값을 클래스에 대한 확률로 변환하는 역할. 소프트맥스 함수는 입력값을 0과 1 사이의 확률값으로 변환하고, 모든 클래스에 대한 확률의 합은 1이 되도록 조정

 

소프트맥스 회귀(softmax regression) 로지스틱 회귀를 다중 클래스 분류 문제로 확장한 알고리즘. 로지스틱 회귀가 이진 분류에 사용되는 것과 달리, 소프트맥스 회귀는 다중 클래스 분류에 적용

 


 

소프트맥스 회귀응용 분야

1. 이미지 분류: 소프트맥스 회귀는 이미지에 대한 다중 클래스 분류에 적용. 예를 들어, 소프트맥스 회귀를 사용하여 손글씨 숫자 인식, 동물 종류 분류 등의 문제를 해결.

2. 자연어 처리: 소프트맥스 회귀는 텍스트 분류나 감성 분석과 같은 자연어 처리 문제에서 사용. 예를 들어, 문장이 어떤 주제에 속하는지 분류하거나 긍정/부정 감성을 분석하는 등의 작업에 적용.

3. 음성 인식: 소프트맥스 회귀는 음성 인식 문제에서 사용. 음성 데이터를 특정 카테고리(단어, 명령 등)로 분류하는 작업에 소프트맥스 회귀를 적용하여 모델을 학습.

4. 추천 시스템: 소프트맥스 회귀는 추천 시스템에서 사용. 예를 들어, 사용자의 특성과 아이템의 특성을 고려하여 어떤 아이템을 추천할지 결정하는 문제에 소프트맥스 회귀를 적용.

 


 

소프트맥스 회귀의 한계: 선형 분리 가능한 문제에 적합하고 클래스 불균형 문제와 고차원 데이터에 취약하며 클래스 간 상관관계를 고려하지 않음. 

 

개선방안: 클래스 불균형 문제를 해결하기 위해 가중치 조정 및 샘플링 기법 적용, 비선형 문제에 대한 적응력을 높이기 위해 다중 계층 신경망 적용, 클래스 간 상관관계 고려를 위해 다른 분류 알고리즘과 결합하여 앙상블 모델 구축.

 

 

'machine_learning > Deep_learning' 카테고리의 다른 글

선형 분류와 선형 회귀  (0) 2023.06.27
인공신경망 - 옵티마이저  (0) 2023.06.26
인공신경망 - 기초  (0) 2023.06.26

선형 분류 vs 선형 회귀

선형 회귀는 연속 변수를 예측하는 데 사용되는 선형 모델
선형 분류는 범주형 변수를 분류하는 데 사용되는 선형 모델


대표적인  선형분류 알고리즘

로지스틱 회귀(Logistic Regression): 선형 회귀를 이용하여 이진 분류를 수행. 로지스틱 함수를 사용하여 확률을 계산하고, 이를 기반으로 클래스를 예측. 시그모이드 함수를 사용, 로그손실 함수 사용

서포트 벡터 머신(Support Vector Machines, SVM): 선형 분류 문제에서 가장 잘 알려진 알고리즘. 데이터를 고차원 공간으로 매핑하여 선형으로 분리할 수 있는 최적의 경계를 찾는다.

선형 판별 분석(Linear Discriminant Analysis, LDA): 주어진 클래스의 평균과 공분산을 기반으로 선형 결정 경계를 찾는 알고리즘. 클래스 간 분산이 최대화되고 클래스 내 분산이 최소화되도록 결정 경계를 결정.

퍼셉트론(Perceptron): 초기 머신 러닝 알고리즘 중 하나로, 선형 분류를 위한 이진 분류기. 오분류된 샘플에 대해 경사 하강법을 사용하여 가중치를 조정하여 학습.

 

선형 결정 경계

 선형 분류 모델에서 데이터를 나누는 직선 또는 초평면, 이 경계선은 데이터를 클래스별로 분리하는 역할을 하며, 분류 모델의 예측 결과를 결정하는 기준

 

결정 경계  분류 모델에서 클래스를 나누는 경계를 의미, 학습된 분류 모델의 파라미터와 특성의 조합에 따라 결정


 

 

 

'machine_learning > Deep_learning' 카테고리의 다른 글

소프트맥스 회귀  (0) 2023.06.27
인공신경망 - 옵티마이저  (0) 2023.06.26
인공신경망 - 기초  (0) 2023.06.26

옵티마이저 :  모델이 학습 데이터로부터 학습하며 최적의 파라미터를 찾아내는 과정에서 옵티마이저는 손실 함수(loss function)를 최소화하는 파라미터 값을 조정. 이를 통해 모델이 더 나은 예측을 수행할 수 있도록 돕는다.

다양한 종류의 옵티마이저가 있으며, 각각의 옵티마이저는 다른 방식으로 파라미터를 업데이트한다. 

 



확률적 경사 하강법(Stochastic Gradient Descent, SGD): 여러 샘플 중 하나 픽해서 손실 계산하여 업데이트, 일반적으로 대규모 데이터셋에서 사용

 

장점:
구현이 간단하고 계산 비용이 적다.
대규모 데이터셋에 적용하기에 유리


단점:
수렴 속도가 상대적으로 느릴 수 있다.
노이즈가 있는 데이터에서 수렴이 어려울 수 있다.

 

Mini-batch Gradient Descent : 학습 데이터를 작은 배치(mini-batch) 단위로 나누어 파라미터를 업데이트하는 방식. 전체 학습 데이터를 사용하는 배치 경사 하강법보다 빠른 계산 속도와 일정한 수준의 노이즈를 가지면서도 안정적인 업데이트를 제공합니다.


모멘텀 최적화(Momentum Optimization): 이전 업데이트에서의 관성을 사용하여 현재 기울기와 함께 업데이트에 영향을 준다. 이를 통해 이동 방향이 일정하게 유지되어 지역 최솟값에 빠지지 않고 전역 최솟값을 탐색할 수 있다.


장점:
이전 그래디언트의 영향을 고려하여 빠르게 수렴할 수 있다.
로컬 최솟값에서 빠져나오는 데 도움이 된다.


단점:
골짜기를 넘어서는 경우에는 속도가 빨라져 수렴이 어려울 수 있다.



아다그라드(Adagrad): 각 파라미터마다 학습 속도를 조정하여 자주 업데이트되는 파라미터에는 더 작은 학습 속도를 적용. 이는 기울기가 크게 갱신되는 파라미터를 더 작은 학습 속도로 업데이트하여 효과적인 학습을 돕는다.

 

장점:
매개변수별로 학습률을 조정하여 효율적인 학습을 가능하게 한다.
희소한 그래디언트에 대해서도 잘 동작한다.


단점:
학습률이 너무 감소하여 일찍 멈출 수 있다.
학습률 조정에 대한 자동화가 필요하다.


RMS프롭(RMSprop): 아다그라드의 단점인 학습 속도가 급격히 줄어드는 문제를 해결하기 위해 제안된 알고리즘으로, 최근 기울기를 크게 반영하여 학습 속도를 조절.

 

장점:
과거 그래디언트의 지수적 평균을 사용하여 학습률을 조정하여 안정적인 학습을 가능하게 하다.
학습률 감소 문제를 완화한다.


단점:
학습률이 여전히 너무 빨리 감소할 수 있다.

아담(Adam): 모멘텀 최적화와 RMS프롭을 결합한 알고리즘으로, 자유롭게 파라미터를 업데이트하고 속도를 조절하는 데에 효과적. 

 

모멘텀 최적화와 RMSprop의 장점을 결합하여 안정적이고 빠른 수렴을 가능하게 한다.
학습률의 조정을 자동화하고 효율적으로 수렴한다.


단점:
하이퍼파라미터에 민감할 수 있다


대부분 아담을 많이 사용

 

'machine_learning > Deep_learning' 카테고리의 다른 글

소프트맥스 회귀  (0) 2023.06.27
선형 분류와 선형 회귀  (0) 2023.06.27
인공신경망 - 기초  (0) 2023.06.26

인공신경망 : 인간의 뇌의 신경망을 모방하여 만든 머신러닝 알고리즘, 인공신경망은 여러 개의 연결된 노드(뉴런)로 구성되며, 이러한 노드는 입력을 받아 처리하고 결과를 출력. 각 노드는 일련의 가중치와 활성화 함수를 사용하여 입력 데이터에 대한 연산을 수행. 가중치는 입력 데이터에 곱해지는 값으로, 학습을 통해 최적화. 활성화 함수는 노드의 출력을 결정하는 비선형 함수로, 입력에 대한 비선형 변환을 수행.

인공신경망은 일반적으로 여러 층으로 구성된 신경망으로 사용. 입력층, 은닉층, 출력층으로 구성된 이러한 신경망을 다층 퍼셉트론(Multi-Layer Perceptron, MLP). 은닉층은 입력과 출력 사이에 있는 층으로, 입력 데이터를 비선형으로 변환하여 다양한 패턴을 학습. 이러한 신경망은 역전파(backpropagation)라는 학습 알고리즘을 사용하여 가중치를 조정하고 오차를 최소화.

생물학적 신경망과 다르다!

 

생물학적 신경망 : 생물학적 신경망은 생물학적인 뇌를 기반으로 했고 인공 신경망은 감정 등 다양한 생물학적 제약을 받지 않고 수학적 모델로 구성. 생물학적 신경망은 동적으로 학습 기억 적응 복구 등의 생물학적 기능도 수행. 또 단순한 패턴 인식에는 효과적이지만 복잡한 문제에선 더 고생하는 걸 보니 딱 인간같음, 반면 인공 신경망은 학습이 끝나면 그대로 사용, 새로운 입력에 적응이 어렵다.


인공신경망 구조

 

입력층 : 입략 데이터가 들어오는 부분

은닉층: 입력층과 은닉층 사이에 있는 층

출력층: 출력값을 내보내는 부분으로 노드는 출력값의 종류에 따라 달라진다(이진분류면 하나, 다중 분류면 여려개)

 

각 층의 노드(층) 사이에는 가중치와 바이어스를 가진다. 바이어스는 각 노드에 대한 편향값. 가중치는 입력신호에 곱해져서 다음 레이어로 전달되는 값인데 컴퓨터가 계산한다.

 

편향 : 뉴런의 입력에 더해지는 상수. 편향은 신경망에서 각 뉴런이 활성화될 기준을 조정하고, 비선형성을 추가하는 데 사용. 편향을 사용하는 이유는 인공 신경망의 표현 능력을 향상시키기 위해서이다.


편향은 각 뉴런의 입력에 더해지는 상수 값으로, 신경망의 출력을 결정하는 데 영향을 준다. 편향을 사용하지 않으면, 입력 데이터의 선형 변환만을 수행하는 신경망이 되어 제한된 표현 능력을 가질 수 있다. 하지만 편향을 추가함으로써, 신경망은 비선형성을 가지게 되고 다양한 패턴을 학습할 수 있다.

y = wx + b (w는 입력 x에 대한 가중치이고 b는 편향)

 


손실 함수(loss function):  모델의 출력과 실제 값 사이의 차이를 측정하는 함수. 주어진 입력에 대해 모델의 예측값과 실제값 간의 오차를 계산하여 모델의 성능을 평가하고 학습 과정에서 모델을 업데이트하는 데 사용. 

일반적으로 회귀 문제에서는 평균 제곱 오차(Mean Squared Error, MSE) 또는 평균 절대 오차(Mean Absolute Error, MAE)와 같은 손실 함수가 사용. 손실 함수는 모델을 평가하고, 학습 중에 그라디언트(기울기)를 계산하여 모델의 가중치 및 편향을 업데이트하는 데 사용. 학습 과정에서 손실 함수의 값은 최소화되도록 모델 파라미터를 조정하고, 최적의 모델을 찾는 데 도움을 준다. 분류 문제의 경우, 예측값과 실제 라벨 간의 차이를 교차 엔트로피 손실(Cross Entropy Loss) 등을 사용하여 계산. 엔트로피 손실 함수에서 이진분류일 경우는 binary 교차 엔트로피 손실을 다중 분류에서는 categorical 교차 엔트로피 손실을 사용

 

 

-평균 제곱 오차

모델의 예측값과 실제값 사이의 차이의 제곱을 계산하고, 이들의 평균을 구하여 오차를 나타낸다. 커질수록 문제가 많은 것

 

-엔트로피 손실 

 분류 문제에서 사용되는 손실 함수로, 모델의 예측값의 엔트로피(불확실성)를 최소화하는 방향으로 학습을 진행

 

-힌지 손실 :

이진 분류 문제에서 사용되는 손실 함수로, 예측값과 실제 라벨 간의 차이를 일정한 마진(margin)으로 비교하여 오차를 계산하며, 예측값과 실제 라벨이 일치할 때 손실이 0이 된다. 주로 서포트 벡터 머신(Support Vector Machine)에서 사용

 

-L2손실

 L2 손실은 모델의 예측값과 실제값 사이의 차이(오차)를 제곱한 후 평균을 구하는 방식으로 계산

 


활성 함수 :  인공 신경망의 각 뉴런에서 입력 신호의 가중치 합을 출력값으로 변환하는 함수

 

시그모이드 함수(=로지스틱 함수) : 입력값을 0과 1 사이의 연속적인 값으로 변환하는 활성 함수. 주로 이진 분류 문제에서 출력층의 활성 함수로 사용되거나, 로지스틱 회귀와 같은 모델에서 활성 함수로 사용

 

렐루 함수 :  입력값이 0보다 작을 때는 0을 출력하고, 0보다 큰 경우에는 입력값을 그대로 출력하는 함수

 

리키 렐루 함수 : 음수 범위에서도 0이외의 값을 묘하게 가질 수 있게됨

 

소프트맥스 : 입력값을 클래스 확률로 변환하는 함수. 주로 다중 클래스 분류 문제에서 출력층의 활성화 함수로 사용.
소프트맥스 함수는 입력 벡터의 각 요소를 [0, 1] 범위로 압축하고, 모든 요소의 합이 1이 되도록 정규화. 이를 통해 각 요소는 해당 클래스에 속할 확률로 해석

 

하이퍼볼릭 탄젠트 : 시그모이드 함수와 비슷하지만 출력 범위가 -1에서 1사이다.

 


역전파 : 역전파는 출력과 실제 값 사이의 오차를 역으로 전파하여 각 계층의 가중치를 조정하는 알고리즘

 

오차 역전파 : 인공 신경망에서 가중치와 편향을 학습시키기 위한 알고리즘 중 하나,

오차 역전파 알고리즘은 다음과 같은 단계로 이루어진다

1. 순전파: 주어진 입력에 대해 신경망의 순전파를 수행하여 출력을 계산
2. 오차 계산: 출력과 실제 값 사이의 오차를 계산
3. 역전파: 오차를 역으로 전파하여 각 계층의 가중치에 대한 기울기를 계산
4. 경사하강법: 계산된 기울기를 사용하여 가중치를 업데이트
위 단계를 반복하여 학습을 진행

 

출력 : 예측값이 나오는 구간. 

 


머신러닝과 딥러닝

 

딥러닝은 머신러닝의 한 종류이고 머신 러닝은 인공 지능 분야에 속한다.

 

머신러닝은 데이터에서 패턴을 학습하여 예측 모델을 구축하는 반면, 딥러닝은 인공신경망을 사용하여 데이터로부터 자동으로 특징을 추출하고 예측 모델을 학습하는 것.

머신러닝은 초기에는 인간이 특징(feature)를 선택하고 모델의 구조와 하이퍼파라미터를 설정하는 등의 개입이 필요하지만, 학습이 진행되면서 모델 스스로가 데이터에서 패턴을 학습하여 최적의 예측 모델을 생성함. 따라서 머신러닝은 인간의 개입이 필요하지만, 딥러닝은 더 많은 부분을 인공신경망이 자동으로 처리하므로 인간의 개입이 상대적으로 적다고 볼 수 있다.

 

머신 러닝 과정에서 어떻게 패턴을 추출할지 정하는 것이 모델을 정한다고 표현

딥러닝에서는 신경망 구조를 고르는 것을 모델을 정한다 표현

 

딥러닝에서도 지도학습/비지도 학습이 존재한다(정답지의 유무)

 

지도학습에는 분류 또는 리그레션같은 주가 예측처럼 수치를 맞추는 게 있고

비지도 학습에는 클러스터링 같이 같은 그룹을 무리지어주는 것이 있다

 

분류는 이산적(독립된 의미)인 정답을 가지고 회귀는 연속성이 있다. 딥러닝에서는 이 신경망의 출력창을 이런걸 고려하고 설계해줘여 한다


단순 선형 회귀:

독립 변수 X와 이에 대응하는 종속 변수 Y의 선형적 관계를 모델링하는 회귀 분석 기법

 

다중 선형 회귀:

독립 변수가 여러개이고 이에 대응하는 종속변수는 하나


경사 하강법 :

최적화 알고리즘 중 하나로, 함수의 최솟값을 찾기 위해 사용. 주어진 함수의 기울기(경사)를 따라 내려가면서 최솟값을 찾는 방법.

경사 하강법은 언덕(손실함수의 그래프)을 내려가는 방법이라고 할 수 있다.하나의 큰 언덕 위에 서 있을 때, 가장 낮은 곳으로 내려가려면 어떻게 해야 할까? 네가 있는 위치에서 발을 내디뎌서 가장 가파르게 내려가는 방향으로 걸으면 된다. 그리고 조금씩 움직이면서 내려가면, 결국 언덕의 가장 아래 지점에 도달하게 될 것이다.

머신 러닝에서 경사 하강법은 이와 비슷한 원리로 작동한다. 찾고자 하는 목표는 함수의 최솟값이고, 그 함수는 언덕과 같다. 경사 하강법은 현재 위치에서 함수의 기울기를 계산하고, 가장 기울기가 큰 방향으로 조금씩 이동하면서 최솟값을 찾아가는 것이다. 이렇게 조금씩 이동하면서 최솟값에 점점 가까워질 수 있다.

그래서 경사 하강법은 머신 러닝에서 함수의 최솟값을 찾거나 모델을 최적화할 때 사용된다. 함수를 계속해서 평가하고 기울기를 이용해서 최적화를 수행하는 것. 이렇게 하면 모델이 더 잘 동작하게 되고, 예측도 정확해지게 될 것이다.

 

경사 하강법에서 사용되는 학습률(learning rate)와 반복횟수(iterations)

학습률 : 각 반복 단계에서 모델의 가중치를 업데이트하는 양을 조절

반복횟수 : 모델을 학습시키는 데 필요한 총 반복 횟수

 


경사 하강법의 종류

(1) 배치 경사 하강법은 경사 하강법의 한 종류로, 모든 학습 데이터를 한 번에 사용하여 가중치를 업데이트하는 방식

(2) 확률적 경사 하강법은 경사 하강법의 한 종류로, 각 학습 데이터마다 가중치를 업데이트하는 방식으로, 데이터 하나씩 처리하며 반복하여 가중치를 조정

(3) 미니배치 경사 하강법은 경사 하강법의 한 종류로, 일부 학습 데이터(미니배치)를 사용하여 가중치를 업데이트하는 방식으로, 배치 경사 하강법과 확률적 경사 하강법의 절충안, 보통은 이 방법을 사용!!!


경사 하강법에서 일어날 수 있는 문제점과 해결 

지역 최솟값 문제: 경사 하강법은 최솟값을 찾는 것을 목표로 하지만, 복잡한 함수에서는 지역 최솟값에 갇힐 수 있다. 전역 최솟값을 찾는 것이 어려울 수 있다.

학습률 선택 문제: 학습률은 가중치 업데이트 양을 조절하는 역할을 한다. 너무 작은 학습률은 학습 속도를 늦출 수 있고, 너무 큰 학습률은 발산할 가능성이 있다. 적절한 학습률을 선택하는 것이 중요하다.

특성 스케일 문제: 입력 특성의 스케일이 크게 다르면 경사 하강법이 수렴하는 데 어려움을 겪을 수 있다. 스케일이 큰 특성이 작은 특성에 비해 지배적인 역할을 할 수 있다. 이를 해결하기 위해 입력 데이터를 정규화하는 전처리 단계가 필요할 수 있다.

과적합 문제: 학습 데이터에 지나치게 맞춰진 모델은 새로운 데이터에 대해 일반화하기 어렵다. 이를 과적합이라고 한다. 적절한 정규화 기법(예: 규제)을 적용하여 과적합을 줄이는 것이 중요하다. -> 데이터 더 수집

수렴 속도 문제: 경사 하강법은 일정한 반복 횟수 이후에 수렴하게 된다. 수렴 속도가 느리거나 수렴하지 않을 수도 있다. 이를 해결하기 위해 학습률 조정, 초기 가중치 설정 등을 변경하여 수렴을 개선할 수 있다.


회귀 평가 지표

평균 제곱 오차(Mean Squared Error, MSE): 예측 값과 실제 값 사이의 평균 제곱 오차를 계산. 오차를 제곱하여 계산하므로 오차의 크기에 따른 가중치를 부여. MSE가 작을수록 모델의 예측이 실제 값에 더 가깝다고 할 수 있음.

평균 절대 오차(Mean Absolute Error, MAE): 예측 값과 실제 값 사이의 평균 절대 오차를 계산. 오차의 절댓값을 계산하므로, 실제 오차의 크기에 대한 가중치를 부여하지 않음. MAE가 작을수록 모델의 예측이 실제 값에 더 가깝다고 할 수 있다.

평균 제곱근 오차(Root Mean Squared Error, RMSE): MSE의 제곱근을 계산한 값으로, 예측 값과 실제 값 사이의 평균 제곱근 오차를 나타낸다. 오차의 크기에 대한 가중치를 부여하고, MSE와 단위가 동일. RMSE가 작을수록 모델의 예측이 실제 값에 더 가깝다고 할 수 있다.

 


 

 뉴럴 네트워크 플레이 그라운드>

인공신경망 구조에 대해 공부하기 좋다

 

 

 

예시>

'machine_learning > Deep_learning' 카테고리의 다른 글

소프트맥스 회귀  (0) 2023.06.27
선형 분류와 선형 회귀  (0) 2023.06.27
인공신경망 - 옵티마이저  (0) 2023.06.26

1. 데이터 수집

2. 데이터 정제 : 원천 데이터 검수, 불량 데이터 제거 및 수정

3. 데이터 가공 : 레이블링 및 태깅, 데이블링 데이터 검수

4. 데이터셋 검증 : 품질과 유용성 검증

 

 

데이터 구축 기획

(1) 비즈니스 목표 설정 

(2) 데이터 수집 계획 

(3) 데이터 전처리 계획

(4) 데이터 저장 계획(데이터 베이스나 데이터 웨어하우스등 저장소 결정, 저장 방식과 구조등을 포함한 저장 계획을 수립)

데이터 저장할 때 날짜 기입하면 좋다

 

라벨은 80개 이하로 해야 적절

 

바운딩 박스

- 해당 물체에 거의 딱맞게 치는게 베스트

- 앞에 물체를 가리는 게 있다면 제외하고 잡기

- 이상한 곳에 박스 쳐서 태깅 이상하게 되면 삭제

- 태깅 대상이 있는데 무시한 경우

 

인체 키포인트 라벨링

- 몸통~하체는 가려쳐도 추정해서 라벨링

- 코는 가려지면 라벨링x

-팔꿈치 손목이 가려지면 라벵링 하지 않는다

- 장애물에 의해 관절 가려지면 상체의 경우 모두 추정하여 라벨링

 

복합 비정형 데이터를 위한 백터 데이터베이스

 -벡터 기반 데이터를 저장, 관리, 검색하기 위한 데이터베이스 시스템

-이미지 검색 엔진은 바로 백터 데이터를 이용한 것

-벡터 데이터는 숫자의 배열 또는 값으로 표현되며, 공간상의 위치나 특성을 나타내는 데이터

-벡터 데이터베이스는 벡터의 고차원적인 특성을 고려하여 데이터를 구성하고, 효율적인 유사도 검색 알고리즘을 제공. 이를 통해 벡터 간의 거리, 유사도, 클러스터링 등을 계산하여 데이터를 검색하고 분석

'machine_learning' 카테고리의 다른 글

데이터셋과 데이터로더, Pytorch 설치  (1) 2023.06.16
데이터 수집과 전처리2  (0) 2023.06.14
데이터 수집과 전처리  (0) 2023.06.14
통계 - 인자분석  (0) 2023.06.02
통계 - 주성분 분석(PCA)  (0) 2023.06.01
더보기

데이터의 작업 순서

1.데이터 수집: 원하는 작업에 맞는 데이터를 수집합니다. 이는 주어진 작업에 필요한 특성을 가진 적절한 데이터를 찾는 과정입니다. 예를 들어, 이미지 분류 작업을 위해 이미지 데이터를 수집하는 것입니다.

2.데이터 전처리: 수집한 데이터를 모델에 적용 가능한 형태로 가공합니다. 이 단계에서는 데이터를 정제하고, 노이즈를 제거하며, 필요한 형식으로 변환하는 등의 작업을 수행합니다. 예를 들어, 이미지 데이터의 경우 크기를 조정하거나 정규화하는 등의 전처리를 진행합니다.

3.데이터 분할: 전체 데이터를 훈련용, 검증용, 테스트용 데이터로 분할합니다. 일반적으로 데이터의 70-80%를 훈련용 데이터로 사용하고, 나머지를 검증용과 테스트용 데이터로 사용합니다.

4.모델 훈련: 훈련용 데이터를 사용하여 모델을 학습시킵니다. 모델은 데이터의 입력과 출력 간의 관계를 학습하고, 가중치와 매개변수를 조정하여 예측을 수행할 수 있도록 합니다.

5.모델 평가 및 성능 개선: 검증용 데이터를 사용하여 모델의 성능을 평가합니다. 성능 측정 지표를 확인하고, 필요한 경우 모델의 하이퍼파라미터를 조정하거나 모델 구조를 수정하여 성능을 개선합니다.

6. 모델 테스트: 테스트용 데이터를 사용하여 최종 모델의 성능을 평가합니다. 이 단계에서는 테스트용 데이터에 대한 예측을 수행하고, 결과를 평가하여 모델의 일반화 능력과 실제 환경에서의 성능을 확인합니다.

7. 모델 배포: 최종 모델을 배포하고, 새로운 입력 데이터에 대한 예측을 수행합니다. 이 단계에서는 모델을 실전 환경에 적용하고, 필요에 따라 모델의 유지보수 및 업데이트를 수행합니다.

 

Data Set Split

 

인공신경망에 사용되는 데이터로 일단 모두 다 라벨링은 되있어야 한다(정답지 필요)

1. original data set(full dataset)

2. 훈련용 데이터, 검증용 데이터

3. 테스트 데이터 (별개로 데이터 모아놓아라)

 

훈련용 데이터는 모델의 학습을 위해 사용되고, 

검증용 데이터는 모델의 성능 평가와 하이퍼파라미터 튜닝에 사용되며, 

테스트용 데이터는 최종 모델의 성능을 평가하기 위해 사용

 

훈련용 데이터

레이블링된 데이터가 포함된 데이터 수집

 

검증 데이터

학습시키고 있는데 중간에 끊고 테스트하기 힘들기 때문에 epoch마다 검증을 껴넣기 시작하여 검증 데이터가 필요,

이를 통해 모델 아키텍쳐나 모델 하이퍼파라미터 개선할 수 있다

검증 데이터는 학습 데이터에서 일부를 임의로 분리하여 사용할 수 있다

 

테스트 데이터

모델이 학습한 적 없는 데이터로 구성, 최종 성능 평가에 사용, 훈련 및 검증단계에서 사용하면 안됨

 


데이터로더

1. 배치 처리: 데이터를 지정된 배치 크기로 분할하여 모델에 제공합니다.
2. 데이터 셔플: 데이터를 무작위로 섞어 훈련 중 데이터의 순서를 랜덤하게 만듭니다.
3. 병렬 처리: 데이터를 여러 개의 프로세스 또는 스레드로 병렬로 불러와 모델의 입력에 효율적으로 공급합니다.
4. 데이터 온 디맨드(Dataset on Demand): 필요한 만큼의 데이터만 불러올 수 있어 메모리 사용량을 최적화할 수 있습니다.


데이터로더를 사용하기 위한 단계
1. 데이터셋 생성: 데이터를 로드하거나 생성하여 데이터셋 객체를 생성합니다. 이 데이터셋 객체는 PyTorch의 Dataset 클래스를 상속한 사용자 정의 클래스 또는 기본 제공 데이터셋 클래스일 수 있습니다.

2.데이터 변환: 필요한 경우 데이터셋에 전처리 또는 변환을 적용합니다. 예를 들어, 이미지 데이터의 경우 이미지를 텐서로 변환하거나 정규화할 수 있습니다.

3. 데이터로더 생성: 데이터로더 객체를 생성하고 데이터셋을 인자로 전달합니다. 배치 크기, 셔플 여부, 병렬 처리 여부 등의 매개변수를 설정할 수 있습니다.
4. 반복(iteration): 데이터로더를 반복문에서 사용하여 배치 단위로 데이터를 가져옵니다. 각 반복마다 모델에 입력으로 제공되는 배치 데이터와 해당하는 레이블을 얻을 수 있습니다.

 

PyTorch에서는 torch.utils.data.DataLoader 클래스를 사용하여 데이터로더를 생성할 수 있음, 그 외에도 구글의 텐서플로우에서 만든 tfrecord 등등도 있다.


PyTorch 데이터 로더

목적:  효율적인 데이터 공급을 위해 데이터셋을 배치 단위로 분할하고, 데이터를 로드하고 전처리

 

작업 과정:

1. 데이터셋 생성: PyTorch의 Dataset 클래스를 상속하여 데이터셋 객체를 생성합니다. 데이터셋 객체는 입력 데이터와 해당하는 레이블 또는 타겟 값을 제공합니다. 이때 데이터셋은 훈련 데이터, 검증 데이터, 테스트 데이터 등을 나타낼 수 있습니다. 데이터셋은 __getitem__ 메서드를 구현하여 인덱스를 통해 데이터와 레이블을 접근할 수 있도록 합니다.

2. 데이터 변환: 데이터셋에 필요한 전처리 또는 변환을 적용합니다. 이 단계에서는 입력 데이터에 대한 정규화, 이미지 데이터의 크기 조정, 데이터 증강(augmentation) 등의 작업을 수행할 수 있습니다. 이를 위해 PyTorch의 transforms 모듈을 사용할 수 있습니다.

3. 데이터 로더 생성: 데이터 로더 객체를 생성하여 데이터셋을 래핑합니다. 데이터 로더는 데이터셋을 배치 단위로 분할하고, 데이터를 효율적으로 로드하기 위해 병렬 처리와 데이터 셔플 기능을 제공합니다. 데이터 로더는 torch.utils.data.DataLoader 클래스를 사용하여 생성됩니다. 이때 배치 크기, 셔플 여부, 병렬 처리 여부 등의 매개변수를 설정할 수 있습니다.

4. 반복(iteration): 생성한 데이터 로더를 반복문에서 사용하여 배치 단위로 데이터를 가져옵니다. 각 반복마다 모델에 입력으로 제공되는 배치 데이터와 해당하는 레이블을 얻을 수 있습니다. 이러한 반복 과정은 주로 모델의 훈련과 검증 단계에서 사용되며, PyTorch의 학습 루프나 훈련 함수에서 반복적으로 수행됩니다.

 


CPU(Central Processing Unit):

목적:

CPU는 컴퓨터 시스템의 "뇌"로서 다양한 작업을 수행

주요 목적은 범용적인 계산 작업을 처리

CPU는 다양한 작업을 순차적으로 처리하며, 각 작업에 대해 정확하고 복잡한 제어

 

디자인 구조:

 CPU는 소수의 코어(컴퓨팅 유닛)로 구성되며, 각 코어는 복잡한 제어 유닛과 캐시 메모리 등의 추가 기능을 가지고 있음

CPU의 코어는 일반적으로 성능이 높고 복잡한 계산 작업을 처리하는 데 특화

 CPU는 범용 목적을 위해 다양한 유형의 작업을 수행할 수 있는 다양한 명령어 세트를 지원

 

 

GPU(Graphics Processing Unit):

목적: 

그래픽 연산에 특화

그래픽 처리 작업인 3D 렌더링, 비디오 인코딩 및 디코딩, 이미지 처리 등을 고속으로 처리하는 데 사용

또한 최근에는 딥러닝과 같은 병렬 계산 작업에서도 많이 사용


디자인 구조: 

GPU는 수많은 작은 코어(스트림 프로세서 또는 CUDA 코어)로 구성

각 코어는 단순하지만 많은 양의 작업을 동시에 처리할 수 있음

GPU는 대규모 데이터 병렬 처리에 특화

동일한 작업을 동시에 여러 개의 데이터에 적용하여 높은 처리량을 달성

 

 

->

CPU는 범용적인 계산 작업을 처리하기 위해 복잡한 제어와 높은 성능이 필요한 작업에 적합

반면에 GPU는 그래픽 처리 및 병렬 계산 작업에 특화되어 있으며, 대량의 작업을 동시에 처리하는 데 효율적

일반적으로 GPU는 대량의 데이터와 복잡한 모델을 다루는 딥러닝 및 머신러닝 작업에 많이 사용

CPU는 CPU의 다양한 기능과 유연성으로 전처리, 간단한 모델 훈련 및 개발 단계에서 사용

 

 


딥러닝 라이브러리 : PyTorch

딥러닝을 위한 오픈소스 머신러닝 라이브러리로, 유연하고 강력한 도구를 제공하여 딥러닝 모델을 구축하고 학습시키는 데 사용

(keras, tensorFlow,Pytorch 등등 중에서 pytorch를 하는 이유... keras는 일단 tensorFlow와 통합되었고 Tensorflow는 복잡하다)

 

 

 

주요 목적

1. 딥러닝 모델 구축: PyTorch는 모델 아키텍처를 정의하고, 다양한 유형의 레이어, 활성화 함수, 손실 함수 등을 사용하여 딥러닝 모델을 구축하는 데 사용 (모델의 계층적 구조를 유연하게 설계가 가능)

2. 모델 학습: PyTorch는 모델에 입력 데이터를 주입하고, 순전파(forward pass)를 통해 출력을 계산하며, 손실 함수를 사용하여 예측과 실제 값 사이의 오차를 계산. 이후 역전파(backward pass) 알고리즘을 통해 그래디언트(gradient)를 계산하고, 옵티마이저(optimizer)를 사용하여 모델의 가중치를 업데이트하여 학습하는 과정을 수행

3. 데이터 로딩 및 전처리: PyTorch는 데이터 로딩과 전처리를 위한 편리한 도구들을 제공. 데이터셋 클래스를 사용하여 데이터를 로드하고, transforms 모듈을 사용하여 데이터 전처리를 수행. 또한 데이터 로더(DataLoader)를 사용하여 데이터를 배치 단위로 분할하고 병렬 처리를 수행할 수 있음.

4. 모델 평가 및 추론: 학습된 모델을 사용하여 새로운 데이터에 대한 예측을 수행하거나 모델의 성능을 평가. PyTorch는 추론(inference) 작업을 위한 기능을 제공하며, 학습된 모델을 배포하고 활용하는 데 유용

 


 작업 과정
1. 데이터 준비: 입력 데이터와 해당하는 레이블 또는 타겟 값을 가지고 있는 데이터셋을 생성
2. 모델 구성: 모델 아키텍처를 정의하고, 필요한 레이어와 활성화 함수를 사용하여 모델을 구성
3. 손실 함수 정의: 모델의 출력과 실제 값 사이의 오차를 계산하기 위한 손실 함수를 정의
4. 옵티마이저 선택: 모델의 가중치를 업데이트하기 위한 옵티마이저를 선택하고 초기화
5. 학습 루프 실행: 주어진 데이터셋을 사용하여 모델을 학습. 입력 데이터를 모델에 주입하고, 순전파를 통해 예측 값을 계산한 후, 손실 함수를 사용하여 오차를 계산하고 역전파 알고리즘을 통해 모델의 가중치를 업데이트
6. 모델 평가 또는 추론: 학습된 모델을 사용하여 새로운 데이터에 대한 예측을 수행하거나 모델의 성능을 평가합니다.

PyTorch의 유연한 구조와 동적 계산 그래프는 딥러닝 모델의 개발과 실험을 효율적으로 수행할 수 있도록 도와줌

 

 


Pytorch  설치

1. 가상환경 구축

아나콘다 프롬포트(실행) -> 윈도우: 관리자 권한으로 열기!!

 

2. 가상환경에서 가상환경 만들기

conda create -n 가상환경명칭 python==3.8

 

3. 가상환경 접속

conda activate 가상환경명

-----------

 

Pytorch 설치 

https://pytorch.org/

 

PyTorch

An open source machine learning framework that accelerates the path from research prototyping to production deployment.

pytorch.org

pc에 gpu가 있으면 얘를 설치(윈도우 기준) 

cpu만 있으면 이것을 설치

 

Ctrl + Shift + ESC

작업관리자 - 성능 탭에서 GPU 유무를 확인하실 수 있습니다.

conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c pytorch
# gpu 있는 윈도우

 

버전 확인

python -c "import torch; print(torch.__version__)"

 

 

이제 주피터 노트북과 kernal 설치하고 쓰면 된다

 

 

 

 

 


가상환경 삭제

더보기

가상환경 삭제

conda remove --name [가상환경명] --all

 

'machine_learning' 카테고리의 다른 글

데이터 가공 구축 프로세스  (0) 2023.06.22
데이터 수집과 전처리2  (0) 2023.06.14
데이터 수집과 전처리  (0) 2023.06.14
통계 - 인자분석  (0) 2023.06.02
통계 - 주성분 분석(PCA)  (0) 2023.06.01

+ Recent posts