C언어와 Java의 중간형태를 띠고 있는 C++은 C언어의 강력한 기능중 하나인 memory 관리와 Java에서 처럼 Class를 쓸 수 있다는 점에서 매력점이 있다.

 

다만 다른 여러 언어들에 비해 괴랄하고 방대한 문법으로 인해 매우 배우기 난해하다고 생각한다. 

C++은 매니아 층이 있는 만큼 여러 발전형태가 이루어져 왔는데 C++은 물론 STL과 Modern C++ 등만 생각해도 배울 내용들이 C에 비해 너무나도 방대해졌다 생각한다.

따라서 독학 혹은 더 C++에 대해 배워야 할 경우 다음과 같은 책들을 추천한다.

 

초심자: 열혈C++ 프로그래밍 [http://www.yes24.com/Product/Goods/3816661]

             객체지향 프로그래밍을 위한 C++의 이해 [http://www.yes24.com/Product/Goods/69761804]

             시작하자! C++17 프로그래밍 [http://www.yes24.com/Product/Goods/90862480] <=개인적으로 괜찮다고 생각

 

초급: C++ Primer 4판 번역 [https://product.kyobobook.co.kr/detail/S000000676786],

             A Tour of C++ [https://www.stroustrup.com/Tour.html] _C++창시자가 쓴 책이니 꼭 읽어보도록 하자.

중급: Effective C++ ★★★★★ [http://www.yes24.com/Product/Goods/17525589] _C++을 배운다는 사람이 이 책을 모르면 간첩이라 할 만큼 매우매우 중요한 테크닉 서적, 반드시 꼭 읽어야 하는책 

             전문가를 위한 C++ [http://www.yes24.com/Product/Goods/77669043] _ C++ 빨간책

        TCPL [http://www.yes24.com/Product/goods/23441719] _ C++로 먹고 사려면 창시자의 책 한번은 읽어봐야한다 생각한다.(대략 1400쪽 가량이나 되는 책이니 입문서로 추천하기는 좀 그렇고 C++에 익숙해지면 읽어볼만한 책)

 

             

고급: Modern C++ Design, The C++ Programming Language, C++14 STL 철저입문 등은 C++을 더 깊게 공부하면 추천

         C++로 쉽게 풀어쓴 자료구조 [http://www.yes24.com/Product/Goods/30340314] 까지 공부한 후 알고리즘 공부 추천

 

물론 필자는 아직 Effective C++읽는 중이다... 적어도 책 내용이 이해가 될 때 까지 최대한 반복회독이 목적이다.

 먼저 ANN에 대한 개념설명에 이어서 ANN에 대해 조금 더 알아보고자 합니다. 너무 딥한 설명보다는 짧게 설명하겠습니다.

ANN은 크게 분류와 회귀로 나뉘며 분류 ANN은 입력정보를 클래스별로 분류하는 방식이로 회귀 ANN은 입력 정보로 다른 값을 예측하는 방식입니다.

 

혹여 ANN을 활용한 간단한 구현을 보고 싶으신 분들을 위해 이번에 ANN을 공부하기 위해 참고, 분석한 코드가 있는 사이트 주소를 남기겠습니다.(ANN을 활용한 간단한 구현코드 링크: https://www.geeksforgeeks.org/artificial-neural-network-in-tensorflow/)

 

분류 ANN이란 ?

- 입력 정보를 바탕으로 해당 입력이 어느 클래스에 속하는 지를 결정

- 판별은 두 출력 노드의 값을 비교하여 더 큰 쪽을 선택하도록 구현

- 가중치의 학습은 예측값의 목푯값에 대한 오차를 역방향으로 되돌리면서 이루어지기 때문에 오차역전파(error back propagation)라고 한다.

- 오차역전파는 오차를 줄이는 경사 하강법(gradient descent)에서 유도된 방법

- 경사 하강법은 가중치에 대한 손실 함수를 미분하고, 그 미분 값의 방향과 크기를 활용해 가중치를 보상하는 방법

- 손실 함수(loss function)는 가중치에 따라 오차가 얼마나 커지거나 작아지는 지를 평가 

- 손실함수로 교차 엔트로피(cross-entropy) 함수를 주로 사용하는데 이를 적용하려면 출력 노드의 결과를 확률값으로 바꿔야 함

- 확률값은 출력 노드 값을 소프트맥스 연산으로 구함

 

회귀 ANN이란 ?

- 입력값으로부터 출력값을 직접 예측하는 방법

- 실제 데이터의 규칙을 잘 표현하는 함수를 찾는 것이 회귀

- 오차역전파 방법으로 학습시키려면 주로 평균제곱오차, 즉 MSE(mean-square error)를 손실 함수로 사용

- 학습에 의한 최적화 방법으로 확률적 경사 하강법을 많이 사용했으나 최근에는 더 발전된 방법인 Adam, Adagrad, RMSprop 등과 같은 방법을 사용

- Adam :  경사의 분산과 평균으로부터 파라미터를 업데이트하는 적응 알고리즘

- Adagrad : 밀집되지 않은 데이터에 적합하도록 경사 제곱을 통해 시간에 따라 학습률을 조정하는 적응 알고리즘

- RMSprop : 학습률이 급격히 떨어지지 않게 감쇠 항을 추가한 적응 알고리즘

 

케라스를 이용한 ANN 알고리즘 구현 ?

- 함수형 구현은 ANN 모델을 직접 설계하는 인공지능 전문가에게 적합하고, 객체지향형 구현 방식은 전문가가 만들어놓은 ANN 모델을 사용하는 사용자에게 적합

- ANN 모델링은 분산 방식, 연쇄 방식 또는 둘의 혼합 방식으로 구현 가능

- 분산 방식은 구조가 복잡한 경우에 적합, 연쇄 방식은 하나의 순서로 구성된 간단한 신경망의 구현에 적합

  • 1단계 : 인공지능 구현용 패키지 불러오기
  • 2단계 : 인공지능에 필요한 파라미터 설정
  • 3단계 : 인공지능 모델 구현
  • 4단계 : 학습과 성능 평가용 데이터 불러오기
  • 5단계 : 인공지능 학습 및 성능 평가
  • 6단계 : 인공지능 학습 결과 분석

(자료 출처:https://wave-m.tistory.com/14)

 

 

이제 본문에서 사용한 케글의 코드 분석을 시작하겠습니다.

 

참고로 코드 작성자의 해설을 참고삼아서 코드를 분석해 보았습니다.( https://www.youtube.com/watch?v=gybAf1Jv2M8)

 

또한 위의 데이터는 정규분포를 따라야 pearson의 상관관계를 사용할 수 있습니다. 상관관계가 유용하려면 변수가 정규성과 선형성 및 등분산성(각각 normality, linearity, homoscedasticity)을 충족해야 하는데 이는 회귀모형을 진단하는 회귀분석에서 오차에 대한 가정을 표현하는 것입니다. 여기서 회귀분석이란 Regression을 말하는 것입니다.

더 자세한 내용을 알아보고 싶으신 분들은 (https://m.blog.naver.com/shoutjoy/222591478928)를 참고해 주시길 바라겠습니다.

 

다시 돌아가서 코드분석으로 글을 마치겠습니다.

 

이상으로 AI활용과 표현 Regression 참고자료 글을 마치겠습니다. 감사합니다.

'AI활용과 표현_정리_필기' 카테고리의 다른 글

AI활용표현 과제 자가 분석 참고.  (0) 2022.04.02

https://www.kaggle.com/code/salmaneunus/introduction-to-computer-vision-in-fastai

 

Introduction to Computer vision in fastai

Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources

www.kaggle.com

내용을 스스로 태블릿으로 분석한 내용입니다.

 

 

 

In[8]에 나와있는 CNN과 같은 딥러닝 모델 훈련할 때 사용되는 batch와 epoch에 대한 정보입니다.

(https://bskyvision.com/803)

딥러닝에서 배치는 모델의 가중치를 한번 업데이트시킬 때 사용되는 샘플들의 묶음을 의미합니다. 만약에 총 1000개의 훈련 샘플이 있는데, 배치 사이즈가 20이라면 20개의 샘플 단위마다 모델의 가중치를 한번씩 업데이트시킵니다. 그러니까 총 50번(=1000/20) 가중치가 업데이트되겠죠. 하나의 데이터셋을 총 50개의 배치로 나눠서 훈련을 진행했다고 보면 됩니다. 

epoch의 사전적 의미는 "(중요한 사건, 변화들이 일어난) 시대"입니다. 딥러닝에서 에포크는 학습의 횟수를 의미합니다. 만약 에포크가 10이고 배치 사이즈가 20이면, 가중치를 50번 업데이트하는 것을 총 10번 반복합니다. 각 데이터 샘플이 총 10번씩 사용되는 것입니다. 결과적으로 가중치가 총 500번 업데이트되는 것입니다.

 

 

 

'AI활용과 표현_정리_필기' 카테고리의 다른 글

AI활용과 표현_Regression  (0) 2022.04.10

 

먼저 위의 사진에 있는 표식이 디버깅을 할 수 있도록 해주는 버튼

인데 이를 누르면 실행과정을 통해 잘 되고 있는지와 만약 오류가 발생한다면 어느부분에서 오류가 발생하여 작동을 하지 않는 지에 대해서도 잘 알 수 있다.

특히 위의 사진자료처럼 줄을 클릭한 이후 초록색 점을 찍어서 확인할 수 있다.

이를 break point라고 하는데 실행중 break point를 만나면 그 과정에서 있는일을 

위의 사진과 같이 변수가 잘 되는 지 등 확인할 수 있는 창이 있는데 이를 통해 나의 실행결과를 어떻게 고쳐나가야 할 지 알 수 있을 수 있다.

+ Recent posts