From 6968c7a85e855a4bb086c66e31189dc14b48bb97 Mon Sep 17 00:00:00 2001 From: tapioca08 <80656423+suhyeonx@users.noreply.github.com> Date: Sat, 30 Dec 2023 22:16:45 +0900 Subject: [PATCH 01/11] Create answer1.md --- suhyeonx/Week_1/answer1.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 suhyeonx/Week_1/answer1.md diff --git a/suhyeonx/Week_1/answer1.md b/suhyeonx/Week_1/answer1.md new file mode 100644 index 0000000..102733b --- /dev/null +++ b/suhyeonx/Week_1/answer1.md @@ -0,0 +1,20 @@ +Question Set + +**1. 모델이 훈련데이터에서의 성능은 좋지만 새로운 샘플에서의 일반화 성능이 나쁘다면 어떤 문제가 있는 건가요? 해결책 세 가지는 무엇인가요?** + +훈련 데이터에 과대적합 되었기 때문. 단순화하기, 훈련 데이터 더 많이 집어넣기, 훈련 데이터 잡음 줄이기. + + +**2. 데이터의 불균형한 특성을 고려할 때, StratifiedKFold 교차 검증을 적용하는 과정에서 발생할 수 있는 문제점은 무엇이며, 이를 어떻게 해결할 수 있을까요?** + + + +**3. 정확도를 분류기의 성능 측정 지표로 선호하지 않는 이유를 작성해주세요. (Precision과 Recall이라는 키워드를 써서 작성해주세요)** + + 데이터가 불균형하면 정확도가 굉장히 높아지는 등 지표로 사용하기 적합하지 않다. 그래서 정밀도precision, 재현율recall 등의 다른 지표를 사용한다. + + +**4. 경사하강법을 사용하여 모델을 학습할 때, 조기 종료 규제가 무엇을 의미하며, 이 규제가 왜 필요한지에 대해 설명해주세요.(예측오차와 과대적합이라는 키워드를 써서 설명해주세요)** + + 검증 오차가 최소에 도달하는 즉시 훈련을 멈추는 것을 말한다. 경사하강법의 에포크가 증가할수록 검증에 대한 오차가 줄어들었다가 다시 늘어난다. + 다시 늘어나는 것은 모델이 훈련 데이터에 과대적합되었다는 것이다. From 92c8e291537642b8514749492f0eb77c94cb615d Mon Sep 17 00:00:00 2001 From: tapioca08 <80656423+suhyeonx@users.noreply.github.com> Date: Sat, 30 Dec 2023 22:20:53 +0900 Subject: [PATCH 02/11] Create week1-chap1.md --- suhyeonx/Week_1/week1-chap1.md | 105 +++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 suhyeonx/Week_1/week1-chap1.md diff --git a/suhyeonx/Week_1/week1-chap1.md b/suhyeonx/Week_1/week1-chap1.md new file mode 100644 index 0000000..c02d78b --- /dev/null +++ b/suhyeonx/Week_1/week1-chap1.md @@ -0,0 +1,105 @@ +### 용어 +머신러닝: 데이터에서 학습하도록 컴퓨터를 프로그래밍하는 과학(또는 예술) +데이터 마이닝: 대용량의 데이터를 분석해 숨겨진 패턴을 발견하는 것 + +### 요약 +- 머신러닝이란? +- 머신러닝이 왜 유용한지 +- [[머신러닝 시스템의 분류]] + - 지도 학습 vs 비지도 학습 + - 준지도 학습, 자기 지도 학습 + - 온라인 학습과 배치 학습 + - 사례 기반 학습과 모델 기반 학습 +- [[머신러닝 프로젝트의 형태]] +- [[머신러닝의 주요 도전 과제(문제&해결법)]] +- [[머신러닝 평가와 튜닝]] + +[[선형 분류 알고리즘]] +[[전이 학습transfer learning]] +### 연습문제 + +① 머신러닝을 어떻게 정의할수 있나요? + 일반적인 정의: + 명시적인 프로그래밍 없이 컴퓨터가 학습하는 능력을 갖추게 하는 연구 분야 + 공학적인 정의: + 어떤 작업 T에 대한 컴퓨터 프로그램의 성능을 P로 측정했을 때 경험 E로 인해 성능이 향상됐다면, 이 컴퓨터 프로그램은 작업 T와 성능 측정 p에 대해 경험 E로 학습한 것이다. + 머신러닝은 데이터로부터 학습할 수 있는 시스템을 만드는 것. 어떤 작업에서 주어진 성능 지표가 더 나아지는 것을 의미. + +② 머신러닝이 도움을 줄 수 있는 문제 유형 네 가지를 말해보세요. +- 기존 솔루션으로는 많은 수동 조정과 규칙이 필요한 문제 +- 전통적인 방식으로는 해결 방법이 없는 복잡한 문제 +- 유동적인 환경 +- 복잡한 문제와 대량의 데이터에서 인사이트 얻기 + +③ 레이블된 훈련 세트란 무엇인가요? +분류가 된 훈련 세트 ex) 스팸 이메일 샘플, 스팸이 아닌 이메일 샘플 +각 샘플에 대해 원하는 정답(레이블)을 담고 있는 훈련 세트 + +④ 가장 널리 사용되는 지도 학습 작업 두 가지는 무엇인가요? +분류, 회귀 + +⑤ 보편적인 비지도 학습 작업 네 가지는 무엇인가요? +군집 알고리즘, 시각화, ~~이상치 탐지~~, 차원 축소, 연관 규칙 학습 + +⑥ 사전 정보가 없는 여러 지형에서 로봇을 걸어가게 하려면 어떤 종류의 머신러닝 알고리즘을 사용해야 하나요? +강화 학습 + +⑦ 고객을 여러 그룹으로 분할하려면 어떤 알고리즘을 사용해야 하나요? +군집 알고리즘, 계층 군집 알고리즘 +군집 알고리즘(비지도 학습) -> 분류 알고리즘(지도 학습) + +⑧ 스팸 감지의 문제는 지도 학습과 비지도 학습 중 어떤 문제로 볼 수 있나요? +지도 학습 + +⑨ 온라인 학습 시스템이 무엇인가요? +작은 묶음 단위로 데이터를 주입하는 방식 +온라인 학습 시스템은 배치 학습 시스템과 달리 점진적으로 학습할 수 있습니다. 이 방식을 사용하면 변화하는 데이터와 자율 시스템에 빠르게 적응하고 매우 많은 양의 데이터를 훈 +련시킬 수 있습니다. + +⑩ 외부 메모리 학습이 무엇인가요? +메인 메모리에 들어갈 수 없는 큰 데이터셋에서 모델을 훈련 시킬 때. +실시간 시스템(온라인) 수행이 아님. 온라인 학습 기법 사용 + +⑪ 예측을 하기 위해 유사도 측정에 의존하는 학습 알고리즘은 무엇인가요? +사례 기반 학습 + +12) 모델 파라미터와 학습 알고리즘의 하이퍼파라미터 사이에는 어떤 차이가 있나요? +모델 파라미터는 훈련을 하고 훈련 세트에 맞는 모델의 값을 찾아낼 때 쓰임. (ex 선형 모델의 기울기) +하이퍼파라미터는 훈련 전에 미리 지정되고 훈련하는 동안에 상수로 남아있다. 학습 알고리즘 자체의 파라미터. (ex 적용할 규제의 정도) + +⑬ 모델 기반 알고리즘이 찾는 것은 무엇인가요? 성공을 위해 이 알고리즘이 사용하는 가장 일반적인 전략은 무엇인가요? 예측은 어떻게 만드나요? +(비용 함수를 최소화하는) 최적의 모델 파라미터 찾기. +가장 일반적인 전략 - 좋은 예측을 위해 더 많은 특성을 사용하거나/ 좋은 훈련 데이터를 더 많이 모으거나/ 더 강력한 모델을 선택 +일반적으로 훈련 데이터에서 시스템의 예측이 얼마나 나쁜지 측정하고 모델에 규제가 있다면 모델 복잡도에 대한 페널티를 더한 비용 함수를 최소화함으로써 시스템을 +훈련시킵니다. +예측은 새로운 데이터에 모델을 적용해 만든다. + +14) 머신러닝의 주요 도전 과제는 무엇인가요? +모델을 선택해 어떤 데이터에 훈련시키는 것 + 머신러닝의 주요 도전 과제는 부족한 데이터, 낮은 데이터 품질, 대표성 없는 데이터. 무의 미한특성, 훈련 데이터에 과소적합된 과도하게 간단한 모델. 훈련 데이터에 과대적합된 과 +도하게 복잡한 모델 등입니다. + +15) 모델이 훈련 데이터에서의 성능은 좋지만 새로운 샘플에서의 일반화 성능이 나쁘다면 어떤 문제가 있는 건가요? 해결책 세 가지는 무엇인가요? +과대적합 +- 단순화 (파라미터 수가 더 적게, 훈련 데이터의 특성 수 줄이기, 규제) +- 더 많은 훈련 데이터 +- 훈련 데이터의 잡음 줄이기 + +16) 테스트 세트가 무엇이고 왜 사용해야 하나요? +만든 모델을 새로운 샘플에 바로 적용할 수 없으니까. +실전에 배치되기 전에 모델이 새로운 샘플에 대해 만들 일반화 오차를 추정 하기 위해 사용됩니다. + +17) 검증 세트의 목적은 무엇인가요? +모델과 하이퍼파라미터가 테스트 세트에 최적화된 모델을 만들었을 때. (테스트 세트에 과대적합 방지) +모델을 비교하는 데 사용, 이를 이용해 가장 좋은 모델 선택 + +18) 훈련-개발 세트가 무엇인가요? 언제 필요하고 어떻게 사용해야 하나요? +훈련 데이터의 일부를 떼어내 또 다른 세트를 만드는 것. +검증 세트에서의 성능이 나쁜데 그 이유가 +1. 훈련 세트에 과대적합되었기 때문인지 (훈련 세트 ok, 훈련-개발 세트 bad) +2. 데이터의 불일치 때문인지 파악하기 위해 (훈련 세트 ok, 훈련-개발 세트 ok) + +19) 테스트 세트를 사용해 하이퍼파라미터를 튜닝하면 어떤 문제가 생기나요? +모델과 하이퍼파라미터가 테스트 세트에 최적화된 모델을 만들 수 있다. +-> 새로운 데이터에 잘 작동하지 않을 수 있다. +일반화 오차를 낙관적으로 측정하게 됨. From 2625d295cea33664118cf67db2c9231e588eda58 Mon Sep 17 00:00:00 2001 From: tapioca08 <80656423+suhyeonx@users.noreply.github.com> Date: Sun, 31 Dec 2023 22:50:01 +0900 Subject: [PATCH 03/11] Create week1-chatp1-1.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1장 업데이트 --- suhyeonx/Week_1/week1-chatp1-1.md | 108 ++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 suhyeonx/Week_1/week1-chatp1-1.md diff --git a/suhyeonx/Week_1/week1-chatp1-1.md b/suhyeonx/Week_1/week1-chatp1-1.md new file mode 100644 index 0000000..8bbe33f --- /dev/null +++ b/suhyeonx/Week_1/week1-chatp1-1.md @@ -0,0 +1,108 @@ +# 머신러닝 시스템의 분류 +## 훈련 지도 방식에 따른 분류 +## 지도 학습 supervised learning +훈련 데이터에 레이블이 포함. +1) **분류** classification +2) **특성** feature을 사용해 **타깃** target 수치 예측 => 회귀 regression + - 회귀 알고리즘을 분류에 사용할 수도 있고 분류 알고리즘을 회귀에 사용할 수도 있음. + +### 비지도 학습 unsupervised learning +훈련 데이터에 레이블이 없음. +1) **군집** clustering 알고리즘 - 그룹으로 묶는다. +2) **계층 군집** hierarchical 알고리즘 - 더 작은 그룹으로 세분화. + - 분할 군집 divisive clustering (하향식), 병합 군집 agglomerative clustering (상향식) +3) **시각화** visualization 알고리즘 - 도식화가 가능한 2D, 3D 표현 제공 +4) **차원 축소** - 특성 합치기 = **특성 추출** feature extraction +5) **이상치 탐지** outlier detection +6) **특이치 탐지** novelty detection +7) **연관 규칙 학습** association rule learning + +### 준지도 학습 semi-supervised learning +레이블이 일부만 있는 데이터. +- 대부분 지도 학습 + 비지도 학습 + + +### 자기 지도 학습self-supervised learning +레이블이 없는 데이터셋에서 레이블이 완전히 부여된 데이터셋 생성 +- 비지도 학습보단 지도 학습에 가깝 +- 비지도 학습 - 군집, 차원 축소, 이상치 탐지 +- 자기 지도 학습 - 분류, 회귀 + +### 강화 학습 reinforcement learning +- 학습하는 시스템 agent. 환경 environment을 관찰해 행동action을 실행하고 그 결과로 보상reward or 벌점penalty 부과 +- 시간이 지나면서 가장 큰 보상을 얻기 위해 정책policy 라 부르는 최상의 전략을 스스로 학습. + + + +## 입력 데이터의 스트림으로부터 점진적으로 학습할 수 있는지 여부에 따른 분류 +### 배치 학습 batch learning +가용한 데이터를 모두 사용해 훈련 +- 시간과 자원(cpu, 메모리 공간, 디스크 공간...) 많이 소모 -> 오프라인 수행 +**오프라인 학습** offline learning +- 모델의 성능은 시간에 따라 감소 + -> 모델 부패 model rot or 데이터 드리프트 drift + -> 정기적 재훈련 필요 + +### 온라인 학습 online learning (점진적 학습 incremental learning) +데이터를 순차적으로 한 개씩 또는 미니배치 mini-batch라 부르는 작은 묶음 단위로 주입. +- 매 학습 단계가 빠르고 비용이 적게 든다. +어디에 적합? + - 빠른 변화에 적응해야 하는 시스템 + - 컴퓨팅 자원이 제한된 경우 (모바일) +**외부 메모리 학습**out-of-core learning + - 보통 오프라인으로 실행됨. '온라인' 학습과 헷갈리지 말 것. +- 중요한 파라미터: **학습률**learning rate + - 변화하는 데이터에 얼마나 빠르게 적응할 것인지 + - 학습률 high: 데이터에 빠르게 적응/ 금방 잊어버림 + - 학습률 low: 데이터에 느리게 학습/ 덜 민감 + + + +## 어떻게 일반화되는가에 따른 분류 +### 사례 기반 학습instance-based learning +단순히 기억하는 것. +- 훈련 샘플 기억 -> 유사도 측정을 사용해 new and trained 비교하는 식으로 일반화 + +### 모델 기반 학습model-based learning +샘플들의 모델을 만들어 예측에 사용 +- 모델 선택model selection - ex) [[선형 모델linear model]] 채택 + - 선형 모델의 기반의 예측과 비슷한 값을 내는 k-최근접 이웃k-nearest neighbors 회귀도 있음.- 사례 기반의 학습 알고리즘 +- 모델 파라미터 조정 + + + +# 머신러닝의 주요 도전과제 (문제&해결법) +### 주요 작업 <모델을 선택해 어떤 데이터에 훈련시키는 것> +### 문제될 수 있는 것: '나쁜 모델', '나쁜 데이터' + +1. 충분하지 않은 양의 훈련 데이터 +2. 대표성이 없는 훈련 데이터 + 대표하는 훈련 세트를 사용하기 어려운 이유 + 1. 샘플이 작으면 **샘플링 잡음**sampling noise (우연에 의한 대표성 없는 데이터) 발생 + 2. **샘플링 편향**sampling bias 매우 큰 샘플도 표본 추출 방법이 잘못되면 대표성을 띠지 못할 수 있다. +3. 낮은 품질의 데이터 + - 오류, 이상치, 잡음 가득 + - 훈련 데이터 정제 필요 +4. 관련없는 특성 + - 특성 공학feature engineering: 훈련에 좋은 특성 찾기 + - 특성 선택feature selection + - 특성 추출feature extraction: 특성 결합 + - 데이터 수집 +5. 훈련 데이터 과대적합overfitting + 훈련 데이터의 양과 잡음에 비해 모델이 너무 복잡할 때 + ex) 고차원 다항 회귀 모델 vs 선형 모델 + - 단순화: 파라미터 수가 적은 모델 선택, 특성 수 줄이기, **규제**regulation - 모델에 제약 + - 규제의 양은 **[[하이퍼파라미터hyperparameter]]가 결정 + - 더 많은 데이터 + - 잡음 줄이기 +6. 훈련 데이터 과소적합underfitting + 모델이 너무 단순해서 데이터의 내재된 구조를 학습하지 못할 때 + - 모델 파라미터가 더 많은 모델 선택 + - 학습 알고리즘에 더 좋은 특성 제공(특성 공학) + - 모델의 제약을 줄인다. 하이퍼파라미터 감소 + + + +- [[믿기 힘든 데이터의 효과]] + + From f398ffa1b1cb9b3d9d726e170b4937cee555ff9c Mon Sep 17 00:00:00 2001 From: tapioca08 <80656423+suhyeonx@users.noreply.github.com> Date: Fri, 5 Jan 2024 01:56:57 +0900 Subject: [PATCH 04/11] Create week1_chap2-4.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정리 추가 --- suhyeonx/Week_1/week1_chap2-4.md | 216 +++++++++++++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 suhyeonx/Week_1/week1_chap2-4.md diff --git a/suhyeonx/Week_1/week1_chap2-4.md b/suhyeonx/Week_1/week1_chap2-4.md new file mode 100644 index 0000000..1fce236 --- /dev/null +++ b/suhyeonx/Week_1/week1_chap2-4.md @@ -0,0 +1,216 @@ + +# 2장 머신러닝 프로젝트 처음부터 끝까지 +## 2.1 문제 정의 +1) "비즈니스의 목적은?" +2) "현재 솔루션은 어떻게 구성되어 있나요?" +3) "어떤 지도 방식이 필요한가?" +ex) 지도 학습 - 다중 회귀 - 단변량 - 일반적인 배치 학습 +- 데이터가 매우 크면 ([[맵리듀스MapReduce]] 기술 사용) - 배치 학습을 여러 서버로 분할, 또는 온라인 학습 기법 사용. + +## 2.2 성능 측정 지표 선택 +회귀 문제의 전형적인 성능 지표 +- 평균 제곱근 오차 RMSE +- 평균 절대 오차 MAE - 이상치로 보이는 구역이 많을 때 +- 노름 norm + - 유클리드 노름 - 거리 계산. 제곱항을 합한 것의 제곱근 + - 맨해튼 노름 - 절대값의 합 계산 + +## 2.3 가정 검사 + +## 2.4 데이터 이해를 위한 탐색과 시각화 +1) 지리적 데이터 시각화하기 + ex) 산점도 +2) 상관관계 조사하기 + - 표준 상관계수 (pearson's r) - corr() 메서드 사 +3) 특성 조합으로 실험하기 + ex) 구역 내 전체 방 개수 -> 가구당 방 개수 + +## 2.5 머신러닝 알고리즘을 위한 데이터 준비 +1) 데이터 정제 +2) 텍스트와 범주형 특성 다루기 + - 원-핫 인코딩 (한 특성만 1이고 나머지는 0) + - 특성을 다루기 쉽게 바꾸는 방법: 표현 학습 representation learning ex) - 임베딩embedding - 학습 가능한 저차원 벡터로 바꾸는 것. +3) 특성 스케일과 변화 + - min-max 스케일링 (정규화 normalization) - 0과 1사이로 제한 + - 표준화 - 특정 범위로 제한 x. 이상치에 영향 low + ex) 특성 분포의 꼬리가 두꺼울 때 + 1. 특성을 제곱근으로 바꾼다. + 2. 버킷타이징bucketizing + - 역변환 주의 +4) 사용자 정의 변환기 +5) 변환 파이프라인 + +## 2.6 모델 선택과 훈련 +1) 훈련 세트에서 훈련하고 평가하기 + - 결정 트리 +2) 교차 검증으로 평가하기 + 1. k-폴드 교차 검증 + - 훈련 세트를 폴드fold라 부르는 중복되지 않은 10개의 서브셋으로 랜덤 분할 + - 모델을 10번 훈련하고 평가하는데 매번 다른 폴드 사용 + - 랜덤 포레스트 + - 특성을 랜덤으로 선택해서 많은 결정 트리를 만들고 예측의 평균을 구함. + - 앙상블ensemble: 서로 다른 모델들로 구성된 모델 + +## 2.7 모델 미세 튜닝 +1) 그리드 서치: 만족할 만한 하이퍼파라미터 조합을 찾을 때까지 수동으로 하이퍼파라미터를 조정 +- GridSearchCV +2) 랜덤 서치 - RandomizedSearchCV - 하이퍼파라미터 탐색 공간이 커질 때 +3) 앙상블 방법 -> 7장 +4) 최상의 모델과 오차 분석 + +## 2.8 론칭, 모니터링, 시스템 유지 보수 +- 론칭할 때 다시 읽어보자.. + +## 2.9 직접 해보자. + + + + + + +# 3장 머신 러닝 분류 시스템 + +# 3.1 MNIST +잘 알려진 데이터셋. OpenML.org 에서 다운 가능. + +# 3.2 이진 분류기 훈련 +확률적 경사 하강법Stochastic Gradient Descent (SGD) + +# 3.3 성능 측정 +1. 교차 검증을 사용한 정확도 측정 +- 정확도는 성능 측정 지표로 적당하지 않음. + - 특히 불균형 데이터셋을 다룰 때 +2. 오차 행렬confusion matrix +![[Pasted image 20240105002051.png]] +3. 정밀도precision와 재현율recall + 1. F1 점수: 정밀도와 재현율의 조화 평균 + - 점수가 높아지려면 재현율과 정밀도가 모두 높아야한다. +4. 정밀도/재현율 트레이드오프 + - 적당한 결정 임곗값 정하기 + - 임곗값이 높을수록 재현율은 낮아지고 반대로 (보통) 정밀도는 높아진다. + - 누군가가 "99% 정밀도를 달성하자" 라고 말하면 반드시 "재현율 얼마에서?" 라고 물어봐야 한다. +5. ROC 곡선 +수신기 조작 특성reciever operating characteristic(ROC) +- 거짓 양성 비율에 대한 진짜 양성 비율의 곡선 +- 민감도(재현율)에 대한 1-특이도 그래프 +- roc_curve() 함수 +- 좋은 분류기는 완전한 랜덤 분류기의 roc 곡선에서 멀리 떨어저야함. 왼쪽 위 모서리. +- 곡선 아래의 면적area under the curve(AUC)로 비교 + + +# 3.4 다중 분류 +- 여러 전략 소개 +# 3.5 오류 분석 +- 성능 향상 방안에 대한 인사이트 +- 훈련 데이터를 더 모으거나 +- 특성을 찾아보거나 +- 이미지 전처리 +- **데이터 증식data augmentation** -> 7장 +# 3.6 다중 레이블 분류 +여러 개의 이진 꼬리표를 출력하는 분류 시스템 +- ClassifierChain 클래스 + - 각 모델에 적절한 레이블 공급 +# 3.7 다중 출력 분류 +다중 레이블 분류에서 한 레이블이 다중 클래스가 될 수 있도록 일반화한 것. +(값을 2개 이상 가질 수 있음) +- 이미지에서 잡음을 제거하는 시스템 +- 픽셀의 강도를 담은 배열 출력 +- 분류기의 출력이 다중 레이블이고 각 레이블이 여러 개를 가짐. + + + + + + + +# 4장 머신 러닝 모델 훈련 +# 4.1 선형 회귀 +- 닫힌 형태의 방정식 - 파라미터 직접 계산 +- 경사 하강법 - 파라미터 수렴해가기 +선형 모델: 입력 특성의 가중치 합편향bias이라는 상수를 더해 예측을 만든다. +목표: RMSE를 최소화하는 파라미터 찾기 + +==정규 방정식normal equation== +:해석적인 방법. 결과를 바로 얻을 수 있는 수학 공식 +- 유사역행렬, 특잇값 분해(SVD) +- 역행렬 계산 +- 계산 복잡도 - O(n2) + +# 4.2 경사 하강법(GD)gradient descent +여러 종류의 문제에서 최적의 해법을 찾을 수 있는 일반적인 최적화 알고리즘 +파라미터 벡터에 대해 비용 함수의 현재 그레이디언트gradient를 계산한다. +- 세타를 임의의 값으로 시작(랜덤 초기화) +- 조금씩 비용 함수가 감소되는 방향으로 진행 +- 중요한 파라미터 - 스텝의 크기. 학습률 하이퍼파라미터로 결정. +- 전역 최솟값, 지역 최솟값 +-> '모델의 파라미터 공간에서 찾는다' + +- 비용함수의 편도함수 +- **에포크**epoch: 훈련 세트를 한 번 반복하는 것 +- 적절한 학습률을 찾는 것이 중요. + +#### 1. 배치 경사 하강법 +- 매 스텝에서 전체 훈련 세트를 사용한다. +#### 2. 확률적 경사 하강법 +- 매 스텝에서 한 개의 샘플을 랜덤으로 선택하고 그 하나의 샘플에 대한 그레이디언트를 계산한다. +#### 3. 미니배치 경사 하강법 +- 미니배치라 부르는 임의의 작은 샘플 세트에 대해 그레이디언트를 계산 +- SGD보다 최솟값에 더 가까이 도달하게 될 것이지만 + - 지역 최솟값에서 빠져나오기는 더 힘들 수. + +![[Pasted image 20240105005619.png]] +# 4.3 다항 회귀 +- PolynomialFeatures +- 규제 기법 + +# 4.4 학습 곡선 +- 고차 다항 회귀 모델에서 과대적합되는 경우 vs 과소적합 +1. 교차 검증을 통해 확인 +2. 학습 곡선 확인 + - 모델의 훈련 오차와 검증 오차를 훈련 반복 횟소의 함수로 나타낸 그래프 + - 훈련 세트와 검증 세트에서 일정한 간격으로 모델을 평가하고 그 결과를 그래프로 그린다. + - learning_curve() + - 훈련 오차, 검증 오차 검토 +- 편향/분산 트레이드 오프 + + +# 4.5 규제가 있는 선형 모델 +과대적합 줄이기 +#### 모델 규제 +- 자유도, 다항식 차수를 줄이기 +- 모델의 가중치를 제한 + +### 릿지 회귀 +규제항이 추가된 선형 회귀 버전. +- 훈련하는 동안에만 비용 함수에 추가 +- 하이퍼파라미터 a가 모델을 얼마나 규제할지 조절 + +### 라쏘 회귀 +규제항을 추가한다. ㅣ2 노름 대신 가중치 벡터의 ㅣ1노름 사용 +- 덜 중요한 특성의 가중치를 제거하려고 한다. +- 자동으로 특성 선택을 수행하고 희소 모델을 만든다. +- 비용 함수가 세타 = 0에서 미분 불가능 + - 서브그레이디언트 벡터 g 사용 + +### 엘라스틱넷 +릿지와 라쏘를 절충한 모델 +혼합 정도는 혼합 비율 r을 사용. +- 릿지가 기본이 되지만 몇 가지 특성만 유용하다 -> 라쏘, 엘라스틱넷 +- 특성 수가 훈련 샘플 수보다 많거나 특성 몇 개가 강하게 연관되어 있을 때는 라쏘가 문제 발생 -> 엘라스틱넷 + +### 조기 종료 +검증 오차가 최솟값에 도달하면 바로 훈련 중지 + +### 로지스틱 회귀 +- 샘플이 특정 클래스에 속할 확률을 추정하는 데 널리 사용 +- 선형 회귀처럼 바로 결과를 출력하지 않고 결괏값의 로지스틱을 출력한다. + - 로지스틱 = 0과 1사이의 값을 출력하는 시그모이드 함수 + - 양성 샘플, 음성 샘플 + +### 소프트맥스 회귀 (다항 로지스틱 회귀) +로지스틱 회귀 모델은 여러 개의 이진 분류기를 훈련시켜 연결하지 않고 직접 다중 클래스를 지원하도록 일반화될 수 있다. +- 파라미터 벡터들은 파라미터 행렬에 행으로 저장 +- 크로스 엔트로피 비용 함수 + + + From be8f2631e6c0255548eed7dd39867ef80aff0d9c Mon Sep 17 00:00:00 2001 From: tapioca08 <80656423+suhyeonx@users.noreply.github.com> Date: Fri, 5 Jan 2024 02:29:47 +0900 Subject: [PATCH 05/11] Create Week_2.md --- suhyeonx/Week_2.md | 133 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 suhyeonx/Week_2.md diff --git a/suhyeonx/Week_2.md b/suhyeonx/Week_2.md new file mode 100644 index 0000000..19dcf0c --- /dev/null +++ b/suhyeonx/Week_2.md @@ -0,0 +1,133 @@ +# 10장 케라스를 사용한 인공 신경망 소개 +인공 신경망 artificial neural network(ANN): +뇌에 있는 생물학적 뉴런의 네트워크에서 영감을 받은 머신러닝 모델 + +# 10.1 생물학적 뉴런에서 인공 뉴런까지 +- 1943년 매컬러&피츠 최초의 인공신경망 구조 논문 +- 생물학적 뉴런 -> 인공 뉴런 + - 뉴런을 이용한 인공 연산 +### 퍼셉트론 +가장 간단한 인공 신경망 구조 +![[Pasted image 20231229011010.png]]- 계단 함수 사용 + - 헤비사이드 계단 함수 heaviside step function +- 훈련 알고리즘 - 헤브의 규칙에서 영감 + - 헤브의 규칙 (헤브 학습 hebbian learning): 두 뉴런이 동시에 활성화될 때마다 이들 사이의 연결 가중치가 증가하는 경향이 있다. + +사이킷런 - perceptron class + +### 다층 퍼셉트론(MLP) +- 입력 층 + 은닉 층 + 출력 층 +- 입력 층과 가까운 층 - 하위 층, 반대는 상위 층 +모든 그레디언트를 자동으로 효율적으로 계산하는 알고리즘 +**후진 모드 자동 미분**reverse-mode automatic differentiation (reverse-mode autodiff) +: 네트워크를 두 번 통과(전진, 후진)하면 모든 단일 모델 파라미터에 대한 신경망 오차의 그레이디언트를 계산할 수 있다. + +### 역전파backpropagation (backprop) +후진 모드 자동 미분 + 경사 하강법 + +### 비선형함수 +계단 함수를 로지스틱 함수(시그모이드 함수)로 바꿈. +->수평선밖에 없으니 계산할 그레이디언트가 없음. +1) tanh 함수 +2) ReLU 함수 + +### 다층 퍼셉트론 적용 +- 회귀 +- 분류 + +# 10.2 케라스로 다층 퍼셉트론 구현하기 + +# 10.3 신경망 하이퍼파라미터 튜닝하기 + +하이퍼 파라미터의 종류 +- 은닉 층 개수 +- 은닉 층의 뉴런 개 + 일반적으로 층의 뉴런 수보다 층 수를 늘리는 쪽이 이득이 더 많다. +- 학습률 +- 옵티마이저 +- 배치 크기 + + + + +# 11장 심층신경망 훈련 +문제1: +==그레이디언트 소실 & 폭주== +안정화 필요 + +해결1: +### 초기화initialization +각 층의 연결 가중치를 랜덤으로 초기화 + - 글로럿 초기화 (세이비어 초기화) + - 르쿤 초기화LeCun + - He 초기화 (카이밍 초기화) + + +해결2: +ReLU는 완벽 x. - 죽은 ReLU 문제 +### 고급활성화 함수 사용 +- LeakyReLU +- ELU +- SELU +- GELU + - SiLU(Swish) + +해결3: +### 배치 정규화batch normalization +활성화 함수를 통과하기 전이나 후에 모델에 연산 추가 +1. 입력을 원점에 맞추고 정규화 +2. 각 층에서 두 개의 새로운 파라미터로 결과값의 스케일을 조정, 이동 + 하나는 스케일 조정, 하나는 이동 + +장점: +- 그레이디언트 소실 문제가 크게 감소 -> 수렴성을 가진 활성화 함수 사용 가능 + ex) tanh, 시그모이드 + - 가중치 초기화에 네트워크가 훨씬 덜 민감 + - 큰 학습률 + - 규제와 같은 역할 + +단점: +- 모델의 복잡도를 키운다. +- 에포크마다 시간은 더 걸리지만 수렴이 훨씬 빨라져 보통 상쇄된다. + + +해결4: +### 그레이디언트 클리핑 +역전파될 때 특정 임곗값을 넘어서지 못하게 그레이디언트를 잘라내기. +- 일반적으로 배치 정규화를 사용하기 까다로운 순환 신경망에서 사용된다. + + + +# 11.2 사전 훈련된 층 재사용하기 +전이 학습: 비슷한 유형의 문제를 처리한 신경망을 재사용하기. +-> 훈련 속도 up, 필요한 훈련 데이터도 줄어든다. +- 비지도 사전 훈련 +- 보조 작업에서 사전 훈련 + + +# 11.3 고속 옵티마이저 +- 모멘텀 최적화 +- 네스테로프 가속 경사 + - AdaGrad + - 학습률을 감소시키지만 경사가 완만한 차원보다 가파른 차원에 대해 더 빨리 감소. -> 적응적 학습률 + -> 전역 최적점 방향으로 더 곧장 가도록 갱신됨. + - Adam + - 적응적 모멘트 추정. 모멘텀 최적화 + RMSProp + - AdaMax, Nadam, AdamW.. + +- 학습률 스케줄링 + - 거듭제곱, 지수, 구간별 고정, 성능,.. + +# 11.4 규제를 사용해 과대적합 피하기 +1. l1과 l2규제 +2. 드롭아웃 + - 매 훈련 스텝에서 각 뉴런은 임시적으로 드롭아웃될 확률 p를 가짐. + - 하이퍼파라미터 p = 드롭아웃 비율 + - 각 훈련 스텝에서 고유한 네트워크가 생성 + - 과대적합 되면 드롭아웃 비율 높게 + - 수렴을 느리게 만드는 경향이 있지만 적절한 튜닝은 좋음. + - 몬테 카를로 드롭아웃 + +3. 맥스-노름 규제 + +# 11.5 요약 및 실용적인 가이드라인 From 5eb33e9d63b6f884cbe12b3012ed45a53c1bbfe7 Mon Sep 17 00:00:00 2001 From: tapioca08 <80656423+suhyeonx@users.noreply.github.com> Date: Fri, 5 Jan 2024 21:23:27 +0900 Subject: [PATCH 06/11] Update and rename suhyeonx/Week_2.md to suhyeonx/Week_2/Week_2.md --- suhyeonx/{ => Week_2}/Week_2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename suhyeonx/{ => Week_2}/Week_2.md (96%) diff --git a/suhyeonx/Week_2.md b/suhyeonx/Week_2/Week_2.md similarity index 96% rename from suhyeonx/Week_2.md rename to suhyeonx/Week_2/Week_2.md index 19dcf0c..75acadf 100644 --- a/suhyeonx/Week_2.md +++ b/suhyeonx/Week_2/Week_2.md @@ -1,4 +1,4 @@ -# 10장 케라스를 사용한 인공 신경망 소개 +https://github.com/GDSC-Hongik/2023-2-Hands-On-Machine-Learning-Study/blob/suhyeonx/suhyeonx/Week_2.md# 10장 케라스를 사용한 인공 신경망 소개 인공 신경망 artificial neural network(ANN): 뇌에 있는 생물학적 뉴런의 네트워크에서 영감을 받은 머신러닝 모델 From 882f1c3a9d89d64eb6c10b798ed49ee312a8edd7 Mon Sep 17 00:00:00 2001 From: tapioca08 <80656423+suhyeonx@users.noreply.github.com> Date: Fri, 5 Jan 2024 21:23:57 +0900 Subject: [PATCH 07/11] Update Week_2.md --- suhyeonx/Week_2/Week_2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/suhyeonx/Week_2/Week_2.md b/suhyeonx/Week_2/Week_2.md index 75acadf..19dcf0c 100644 --- a/suhyeonx/Week_2/Week_2.md +++ b/suhyeonx/Week_2/Week_2.md @@ -1,4 +1,4 @@ -https://github.com/GDSC-Hongik/2023-2-Hands-On-Machine-Learning-Study/blob/suhyeonx/suhyeonx/Week_2.md# 10장 케라스를 사용한 인공 신경망 소개 +# 10장 케라스를 사용한 인공 신경망 소개 인공 신경망 artificial neural network(ANN): 뇌에 있는 생물학적 뉴런의 네트워크에서 영감을 받은 머신러닝 모델 From 5c599bdc4ce7b307b42a8519bacf9f21d2f90254 Mon Sep 17 00:00:00 2001 From: tapioca08 <80656423+suhyeonx@users.noreply.github.com> Date: Wed, 10 Jan 2024 21:21:06 +0900 Subject: [PATCH 08/11] Create flower_classification.md --- suhyeonx/Week_3/flower_classification.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 suhyeonx/Week_3/flower_classification.md diff --git a/suhyeonx/Week_3/flower_classification.md b/suhyeonx/Week_3/flower_classification.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/suhyeonx/Week_3/flower_classification.md @@ -0,0 +1 @@ + From 50db39121de0b9fe0cd0fc2fbf192f490d4d9269 Mon Sep 17 00:00:00 2001 From: tapioca08 <80656423+suhyeonx@users.noreply.github.com> Date: Wed, 10 Jan 2024 21:21:36 +0900 Subject: [PATCH 09/11] Create Week_3.md --- suhyeonx/Week_3/Week_3.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 suhyeonx/Week_3/Week_3.md diff --git a/suhyeonx/Week_3/Week_3.md b/suhyeonx/Week_3/Week_3.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/suhyeonx/Week_3/Week_3.md @@ -0,0 +1 @@ + From a99c212bb90aaf76faecb364dc896027736dd1b9 Mon Sep 17 00:00:00 2001 From: tapioca08 <80656423+suhyeonx@users.noreply.github.com> Date: Thu, 11 Jan 2024 04:52:18 +0900 Subject: [PATCH 10/11] Update Week_3.md --- suhyeonx/Week_3/Week_3.md | 82 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/suhyeonx/Week_3/Week_3.md b/suhyeonx/Week_3/Week_3.md index 8b13789..b289017 100644 --- a/suhyeonx/Week_3/Week_3.md +++ b/suhyeonx/Week_3/Week_3.md @@ -1 +1,83 @@ +# 12장 텐서플로를 사용한 사용자 정의 모델과 훈련 +## 12. 1 텐서플로 훑어보기 +- 텐서플로 - 구글 브레인 팀 개발 +- 딥러닝 라이브러리 +- 많은 연산은 커널이라고 부르는 여러 구현을 가진다. + - CPU, GPU 또는 TPU 와 같은 특정 장치에 맞추어 만들어졌다. + - [[GPU]] - 계산을 작은 단위로 나누어 여러 GPU 스레드에서 병렬로 실행 -> 속도를 극적으로 향상 + - [[TPU]]는 더 빠르다. - 딥런이 연산을 위해 특별하게 설계된 ASIC 칩. + - 텐서플로 - 방대한 생태계 +## 12.2 넘파이처럼 텐서플로 사용하기 +- tf.Tensor - 변경이 불가능한 객체 +- tf.Variable - 변경이 가능한 객체 +- 텐서플로의 여러 데이터 구조 +- 연산 + +## 12.3 사용자 정의 모델과 훈련 알고리즘 +### 사용자 정의 손실 함수 만들기 +- 평균 제곱 오차: 큰 오차에 너무 과한 벌칙을 가함. +- 평균 절댓값 오차: 이상치에 관대해서 훈련이 수렴되기까지 시간이 걸린다. +- -> 후버 손실(10장) +- 매개변수를 받을 수 있는 함수 만들기 + - threshold 저장 x. + - get_config() 메서드 구현 + +### 활성화 함수, 초기화, 규제, 제한 커스터마이징 하기 + +![[Pasted image 20240110223606.png]] + + +``` +__call__() 메서드 구현하기. +``` + + +### 사용자 정의 지표 +- 손실(ex) 크로스 엔트로피): 경사 하강법에서 모델을 훈련하기 위해 사용. + - 미분 가능해야하고 그레이디언트가 모든 곳에서 0이 아니어야 한다. +- 지표: 모델을 평가할 때 사용 + - 미분 가능하지 않거나 모든 곳에서 그레이디언트가 0이 아니어도 됨. +- 스트리밍 지표streaming metric (또는 상태가 있는 지표stateful metric) + - 배치마다 점진적으로 업데이트 + - tf.keras.metrics.Precision 클래스 +- 사용자 정의 스트리밍 지표 - tf.keras.metrics.Metric 클래스 상속 + +### 사용자 정의 층 +- 가중치가 없는 층 - tf.keras.layers.Lambda 층으로 감쌀 수 있다. +- 상태가 있는 층 (가중치를 가진 층) - tf.keras.layers.Layer 상속 + +### 사용자 정의 모델 +1. tf.keras.Model 상속 +2. 생성자에서 층과 변수 생성 +3. 모델이 해야할 작업을 call() 메서드에 구현 + +### 모델 구성 요소에 기반한 손실과 지표 +모델의 구성 요소 - 은닉 층의 가중치나 활성화 함수 + +### 자동 미분으로 그레이디언트 계산하기 +gradient() 메서드 +- 한 번 이상 호출해야 하면 지속 가능한 테이프를 만들고 사용이 끝난 후 테이프를 삭제해 리소스를 해제해야 한다. +- jacobian() 메서드 +- tf.stop_gradient() 함수 - 신경망의 일부분에 그레이디언트가 역전파되지 않도록 막아야한다. + +### 사용자 정의 훈련 반복 +- fit() 메서드 +- ![[Pasted image 20240111043746.png]] +- 주의해야 할 점이 많고 그 과정에서 실수하기도 쉽다. +- 장점은 완전하게 제어할 수 있다. + + +## 12.4 텐서플로 함수와 그래프 +tf.function() +- 텐서플로는 계산 그래프를 최적화한다. + - 일반적으로 원본 파이썬 함수보다 훨씬 빠르다. +- XLAaccelerated linear algebra를 사용해 전용 커널을 컴파일하며, 종종 여러 연산을 융합한다. +- 다형성(다양한 매개변수 타입과 크기)을 처리한다. +### 오토그래프와 트레이싱 +- 파이썬 함수의 소스 코드를 분석해 제어문을 모두 찾는 것. + - while, if 같은 메서드가 없기 때문이다. + + +![[Pasted image 20240111044412.png]] ++) 텐서플로 함수를 사용할 때 따라야 할 여러 규칙 From e3cbfa8c6ff7f11f9e3fa2124c7f1fb6cca6518a Mon Sep 17 00:00:00 2001 From: tapioca08 <80656423+suhyeonx@users.noreply.github.com> Date: Fri, 12 Jan 2024 00:24:56 +0900 Subject: [PATCH 11/11] Update flower_classification.md --- suhyeonx/Week_3/flower_classification.md | 47 ++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/suhyeonx/Week_3/flower_classification.md b/suhyeonx/Week_3/flower_classification.md index 8b13789..acdf345 100644 --- a/suhyeonx/Week_3/flower_classification.md +++ b/suhyeonx/Week_3/flower_classification.md @@ -1 +1,48 @@ +# 첫 대회 첫 시도 회고 +요약: 엉망진창 + +총 실험 회수는 약 20회. +f1 score 0.9 달성을 목표로 하기보단 케라스를 다뤄보는 데에 초점이 있었다. +(진행 중에 pretained model(trainable)의 T/F를 껐다 켜보거나, 배치 정규화를 넣었다 빼보거나) +이번 주를 발판 삼아 다음에 다시 이 대회를 시작부터 천천히 해보는 거로 하자. +그 때도 실험은 적당히 해보기. + +이번 케라스 사용기의 고칠점: +1. 기록 하나씩 꼼꼼히 확인하기 + 기록을 하려고 했음에도 제대로 안된 부분이 있었다. + ex) 단순 기록 실수, 실험에서 누락된 코드, 수정한 부분 인지 미스,, 등등.. + 그러다 보니까 꼬여서 다시 베이스라인으로 돌아가기도 했다. +2. 변화는 조금씩, 한 변수마다. + 한꺼번에 여러 변화를 주려고 한 적도 있었다. + 한 번에 다 추가해서 확 점수를 올리려고 한 것 같다. +3. 복습 먼저 +4. 다른 사람들의 시도 정황 보기. + 왜 그런 시도가 있었는지 파악하기. + 너무 맨 땅에 해딩하듯이 시도한 것도 화근. +5. 집착 노노.. 스트레스 받지 말기. 훈련 시간 적응하기. + +**변하지 않은 것:** +model: vgg16 +size: 331 + +**시도해 본 것들:** +에포크 -> 30 +batch.normalization layer 추가 +adam->nadam +pretained_model_train = true +학습률 조정. + +**알게 된 것:** +- 전이 학습은 사전 훈련된 모델에서 레이어를 가져오는 것이다. + `layer.trainable`을 `False`로 설정하면 모든 레이어의 가중치가 훈련 가능에서 훈련 불가능으로 이동합니다. 이를 레이어 "동결"이라고 한다. + 반대로 `True`로 설정하면 가중치가 훈련 가능하다. +- early stopping - patience 충분히 늘리지 않으면 너무 빨리 종결됨. +- model에 마음대로 layer 추가하니까 모델이 망가졌다. + +ex) +![image](https://github.com/GDSC-Hongik/2023-2-Hands-On-Machine-Learning-Study/assets/80656423/2be1c0d1-11db-4c34-b945-728582e6dbdf) + +![image](https://github.com/GDSC-Hongik/2023-2-Hands-On-Machine-Learning-Study/assets/80656423/ebd91d0f-d93b-4527-89dc-85706d8cea6b) + +- 개념들을 헷갈렸던 게 너무 많아서 복습 한 번하고 봐야겠다.