멀티 레이어 설정

1 -> 2 -> 1 레이어 구성이었던 것을 1 -> 2 -> 4 -> 2 -> 1 등으로 할 수 있게 했습니다.

주의 : 레이어가 커진다고 해서 반드시 좋은 결과가 있지는 않을 수 있습니다. 또한 vram 오버플로가 날 수 있습니다.


Layer Norm 설정

결과물 최종값(dropout 전)을 표준화해서 특정 파라미터가 과도하게 커지는 것을 막습니다.

주의 : 이는 일반 레이어와 동일한 파라미터를 차지합니다. 즉 vram 오버플로가 날 수 있습니다.


활성화 함수 도입

비선형 네트워크가 가능해집니다. 이는 데이터셋이 적은 경우 별 의미가 없으며, 다양한 태그로 큰 데이터셋이 있을 경우 표현력이 풍부해집니다.

과적합을 막는 것은 아닙니다. 그러나 '전혀 학습하지 못하거나 실패한 것 같은'경우는 줄어들고, 학습하지 않은 태그를 집어넣을 경우 이미지가 아예 뭉개지는 현상이 없어질 것입니다.


Dropout 도입

네트워크에 노이즈를 넣어서 노이즈에 조금 더 강한 네트워크가 만들어지도록 합니다. 즉 과적합을 어느 정도 막으려 합니다.

p = 0.3으로 되어있습니다. 제가 대충 넣은 숫자가 그대로 적용되어있으니 나중에 수정될수 있습니다(...)


Dataset Loss 및 통계 도입

많은 분들이 단순히 로스가 튀고 주는거같은데 이거 맞나? 하고 계셨습니다.

로스가 자꾸 튀는 이유는 이미지별로 로스가 크게 다르기 때문입니다.(아래 참조)

기존 표기법은 최근 32개 이미지의 로스 평균이었고 좋은 지표는 아니었기에 데이터셋 평균 로스를 주기적으로 표기하도록 변경했습니다.

또한 로스가 큰 이미지를 알 수 있도록 분석 기능을 추가했습니다.


Dataset loss는 데이터셋을 '한번' 훑은 뒤에 확인 가능하며, 이전에는 0으로 표기되니 오해 없으시기 바랍니다. (아마 추후 수정될 것 같습니다)

수정되어서 현재까지 계산된 로스 또는 데이터셋 로스의 평균값을 반영하도록 수정되었습니다.


dataset loss: 0.1511301:   0%|                                                  | 210/95901 [01:39<12:36:07,  2.11it/s]
Loss statistics for file F:\stable-diffusion-webui\preprocessed\00011-0-009_01_8.png
loss:0.028±(0.017)
recent loss:0.028±(0.017)

...

Loss statistics for file F:\stable-diffusion-webui\preprocessed\00062-2-1011.png
loss:0.495±(0.228)
recent loss:0.495±(0.228

학습을 종료시(interrupt 포함) 위와 같은 'statistics'가 cmd화면에 뜨게 됩니다. 
이 경우 00011이라는 이미지는 로스가 낮으며, 00062는 로스가 큽니다.
태그가 적절하지 않은 경우 대부분 로스가 크게 나오니 이런 경우 태그를 직접 수정해주면 로스가 크게 낮아지게 됩니다.


하이퍼네트워크는 표현하지 못하는 것을 표현하도록 하는 구조가 아닙니다. 오히려 잘 쓰이는 표현이 뭔지, 이미지를 만드는 표현이 무엇인지 찾아서 매크로처럼 덧붙여주는 틀로 이해해 주시면 되겠습니다.