재형이의 성장통 일지
  • AI 관련 지식(2)
    2024년 03월 13일 06시 53분 08초에 업로드 된 글입니다.
    작성자: 재형이
    반응형
     

     

    • 오늘까지만 하고 내일부터는 실습 위주로 진행이 될 것이다
    • 인공지능을 공부하면서 나는 어떤 쪽으로 방향을 잡고 깊게 들어갈 것인지를 계속 고민하고 있는데 쉽지 않다
    • 모델을 만든다? 연구? 아니면 만들어진 것을 가져다가 사용하는? 어떻게 사용?
    • 열심히 하는 것도 좋지만 하고 싶은 것이 무엇인지, 무엇이 더욱 미래 가치가 높은지를 충분히 고려한 후에 방향을 잡고 꾸준히 공부하는 것이 중요한 것 같다

     

     

     

     

     

     

     

     


     

     

     

     

     

     

     

     

    1. XAI (eXplainable AI)

    https://ex.pegg.io/

    • XAI란 설명이 가능한 AI를 의미하며 우리가 사용하는 모델들의 결과가 왜 이런 결과를 도출하게 되었는지에 대한 고민을 조금이라도 덜어주기 위한 메뉴얼? 같은 것이다
    • XAI를 함으로써 Model은 어떤 feature를 가장 중요하게 생각하는지, 각각의 feature가 Model 예측 결과에 어떠한 영향력을 주는지, 각 feature의 일반적인 효과는 어떻게 되는지에 대해 도움을 줄 수 있다
    • XAI가 필요한 경우는 디버깅을 할 때, 피처 엔지니어링(하나의 피처와 다른 피처를 조합하여 연산하여 새로운 피처를 도출하는 작업을 할 때 인사이트를 줄 수 있음), 데이터 수집을 위한 가이드(가치있고 필요한 데이터만 수집할 수 있음), Model의 예측 결과를 바탕으로 중요 의사결정(model을 실제로 적용하기 위한 판단 근거)을 할 때 사용하면 도움을 받을 수 있다
    • 즉, 한마디로 정리하자면 XAI는 모델의 학습 결과를 해석할 수 있는 방법이다. 모델 성능 개선을 위한 방법을 찾거나 예측 모델을 실제로 사용할 수 있게 하는데(=모델의 신뢰도 상승) 도움을 줄 수 있다
    • XAI 방법
      • Interpretable Models
        – 해석이 가능한 형태의 모델
      • Model Agnostic
        – 모델의 종류와 상관없이 해석할 수 있는 방법 (예: SHAP)
      • Model Specific
        – 모델 자체의 동작을 바탕으로 해석할 수 있는 방법
      • Neural Representations
        – 신경망의 학습 과정에서 추출한 feature의 시각화를 통해 신경망의 학습 내용을 이해

    2. Model의 성능 개선 방법 - 신경망 설계 관점 (Model Driven)

    2-1. Weight Initialization

    • 초기값을 무엇으로 할 것인지에 따라 모델의 성능이 좌우되기 때문에 잘 선택하는 것이 중요하다
    • Xavier가 제안한 초기값 고르는 방법, He가 제안한 초기값 고르는 방법들을 사용하자
    • 다행히 pytorch에서는 API 형태로 제공

    2-2. Drop Out

    • 학습 중에 은닉층의 뉴런을 무작위로 삭제하여 과적합을 예방하는 기법
    • p라는 확률로 출력 노드의 신호를 보내다 말다 함
      • 드롭아웃을 적용한 다음에 오는 계층은 앞 계층의 일부 노드들의 신호가 p라는 확률로 단절되기 때문에 훨씬 더 견고하게 신호에 적응

    • 모든 애들을 다 고려해야할 필요가 있을까? 사람도 항상 뇌를 100% 사용하지 않는다! (애초에 100% 사용 못함ㅋ)

    2-3. Batch Normalization

    • 한 번에 입력으로 들어오는 배치 단위로 데이터 분포의 평균이 0, 분산이 1이 되도록 정규화 진행
    • 빠른 학습 가능: learning rate를 높게 잡을 수 있음
    • 자체적인 regularization 효과

    • 데이터들을 어디에 뿌릴지! 데이터들을 얼마나 쎄게 뿌릴지!
    • Vanishing Gradient 때문에 ReLU를 사용한들 데이터들이 너무 한쪽으로 쏠려있다면 과연 이게 ReLU인지 그냥 Linear인지 알 수 있을까?

    2-4. Early Stop

    # Train
    def traindata(device, model, epochs, optimizer, loss_function, train_loader, valid_loader):
    	# Early stopping
    	last_loss = 100
    	patience = 2
    	triggertimes = 0
        
    	for epoch in range(1, epochs+1):
    		model.train()
    		for times, data in enumerate(train_loader, 1):
    			input, label = data[0].to(device), data[1].to(device)
    			
                # Zero the gradients
    			optimizer.zero_grad()
    			
                # Forward and backward propagation
    			output = model(input.view(input.shape[0], -1))
    			loss = loss_function(output, label)
    			loss.backward()
    			optimizer.step()
    			
                # Show progress
    			if times % 100 == 0 or times == len(train_loader):
    				print('[{}/{}, {}/{}] loss: {:.8}'.format(epoch, epochs, times, len(train_loader), loss.item()))
    
            # Early stopping
    		current_loss = validation(model, device, valid_loader, loss_function)
    		print('The Current Loss:', current_loss)
    
    		if current_loss > last_loss:
    			trigger_times += 1
    			print('Trigger Times:', trigger_times)
    			
                if trigger_times >= patience:
    				print('Early stopping!\nStart to test process.')
    				return model
    		else:
    			print('trigger times: 0')
    			trigger_times = 0
    		
            last_loss = current_loss
    	return model

    2-5. Transfer Learning

    • 기존의 만들어진 모델을 사용하여 새로운 모델을 만드는 방법
    • 학습을 빠르게 하며 예측 성능을 더 높임
    • 이미 잘 훈련된 모델이 있고, 특히 해당 모델과 유사한 문제를 해결 시 효과적

    2-6. End to End vs Part

    • end to end

    • part

    2-7. ML vs DL

    • 딥러닝이 만능은 아니다
    • 데이터셋이 충분하지 않을 경우에는 오히려 딥러닝보다 머신러닝이 더 효율적일 수 있다

    3. Model의 성능 개선 방법 - 데이터 관점 (Data Driven)

    3-1. Data Distribution

    https://en.wikipedia.org/wiki/Log-normal_distribution#/

    • 데이터를 정규 분포화를 시켜서 모델의 성능을 높이는 방법
    • 데이터의 분포와 모델의 입출력으로 기대하는 데이터들 간의 분포 차이가 있는 경우에 사용
    • 로그를 씌워서 정규 분포화, 데이터를 사용할 때는 다시 익스포텐셜을 취해준다

    3-2. Data Scale

    • 데이터들 간의 스케일을 맞춰준다
    • 다양한 피처를 사용할 경우 그 피처에 따라 스케일이 맞지 않는 경우가 생김
    • 특히, 거리를 측정하는 모델 같은 경우에는 스케일을 잘 맞춰주어야 함
    • Standard Scaler는 평균은 0, 표준편차는 1인 정규 분포 형태로 변형해준다
    • Min Max Scaler는 최솟값은 0, 최댓값은 1로 분포 형태를 변형해준다

    3-3. Domain Knowledge

    • 원본 데이터를 입력으로 넣을 때 이런식으로 분류하여 넣어야할 경우, 어떤 식으로 분류할 것인지에 대한 판단 근거는 해당 작업자가 가지고 있는 도메인 지식에 따라 차이가 발생할 수 밖에 없다
    • 그렇기 때문에 해당 영역에 현직자들과의 협업이 중요하다

    3-4. Feature Engineering

    • 주어진 Feature를 변형하여 Target값과 더 관련있게 만들기 위한 작업
    • Mutual Information, 수학공식 적용(예: 비율), count, 데이터 파싱, 데이터 결합, 그룹 변환, K-means, Encoding …

    3-5. Dimension Reduction

    • feature selection
      • 특정 피처에 종속성이 강한 불필요한 피처는 제거하고, 데이터의 특징을 잘 나타내는 주요 피처만 선택
    • feature extraction
      • 피처를 함축적으로 더 잘 설명할 수 있는 또 다른 공간으로 매핑해서 추출

    3-6. Train Set vs Test Set vs Real Data

    • Train과 Test를 하기 위해 수집한 데이터가 현실과는 사실 차이가 많이 나는 데이터라면? 애초에 학습을 한다고 해도 현실에 적용했을 때 좋지 못한 결과를 보여줄 것이다

    4. 시스템 관점에서의 인공지능의 이해

    • ML에서는 사실 코드가 영향을 주는 부분은 굉장히 사소하다고 볼 수 있다. 그 외의 다양한 것들을 고려해야 좋은 모델을 만들 수 있다

     

     

     

     

     

     

     

     

     


     

     

     

     

     

     

     

     

    반응형

    '인공지능 > 인공지능 기초' 카테고리의 다른 글

    머신러닝 Learning Path  (0) 2024.04.09
    GAN(2), AI 관련 지식(1)  (0) 2024.03.12
    Auto Encoder, GAN(1)  (0) 2024.03.11
    NLP (3)  (0) 2024.03.10
    NLP (2)  (0) 2024.03.09
    댓글