> 기술 주변기기 > 일체 포함 > 내가 처음부터 최고의 에세이를 쓴 방법

내가 처음부터 최고의 에세이를 쓴 방법

WBOY
풀어 주다: 2023-04-11 14:16:03
앞으로
1012명이 탐색했습니다.

저는 최근 매우 만족스러운 논문을 완성했습니다. 전체 과정이 즐거웠고 기억에 남을 뿐만 아니라 진정으로 "학문적 영향과 산업적 성과"도 달성했습니다. 나는 이 글이 차등 프라이버시(DP) 딥 러닝의 패러다임을 바꿀 것이라고 믿습니다.

이 경험은 매우 "우연"(과정은 우연으로 가득 차 있고 결론은 매우 영리함)이기 때문에 관찰->개념-->증거-->이론에서 얻은 경험을 반 친구들과 공유하고 싶습니다. -->large 대규모 실험의 전체 과정입니다. 나는 이 기사를 가볍게 유지하고 기술적인 세부 사항을 너무 많이 포함하지 않으려고 노력할 것입니다.

내가 처음부터 최고의 에세이를 쓴 방법

논문 주소: arxiv.org/abs/2206.07136

논문에 제시된 순서와는 다르게, 독자의 관심을 끌기 위해 고의로 결론을 처음에 배치하거나, ​​단순화된 정리를 먼저 소개하거나 간략한 정리를 먼저 소개하는 경우도 있습니다. 이 글에는 부록을 추가하고, 학생들의 참고를 위해 제가 겪은 우회로와 연구 중 예상치 못한 상황 등을 연대순(즉, 실행 계정)으로 기록하고 싶습니다. 과학 연구의 길을 이제 막 시작한 사람입니다.

1. 문학 읽기

문제의 출처는 현재 ICLR에 기록된 스탠포드의 논문입니다:

내가 처음부터 최고의 에세이를 쓴 방법

논문 주소: https://arxiv.org/abs/2110.05679

기사 매우 잘 작성되었으며 요약하면 세 가지 주요 기여가 있습니다.

1. NLP 작업에서 DP 모델의 정확도가 매우 높기 때문에 언어 모델에 개인 정보 보호 적용을 권장합니다. (반대로, CV의 DP는 매우 큰 정확도 저하를 유발합니다. 예를 들어 CIFAR10은 현재 DP 제한 하에서 사전 훈련 없이 80%의 정확도만 가지고 있지만 DP를 고려하지 않고도 쉽게 95%에 도달할 수 있습니다. 시간은 50% 미만이었습니다. )

2. 언어 모델에서는 모델이 클수록 성능이 좋습니다. 예를 들어 GPT2의 성능은 4억 매개변수에서 8억 매개변수로 향상되었으며 많은 SOTA를 달성했습니다. (그러나 CV 및 추천 시스템에서는 더 큰 모델의 성능이 무작위 추측에 가까울 정도로 매우 열악한 경우가 많습니다. 예를 들어 CIFAR10의 DP 최고 정확도는 이전에 ResNet이 아닌 4계층 CNN을 통해 얻은 것입니다.)

내가 처음부터 최고의 에세이를 쓴 방법

DP 모델이 클수록 성능이 향상됩니다. [Xuechen et al. 2021]

3 여러 작업에서 SOTA를 얻기 위한 하이퍼파라미터는 일관됩니다. 클리핑 임계값은 충분히 작게 설정되어야 합니다. 그리고 학습률은 더 커야 합니다. (이전 글은 모두 작업별로 클리핑 임계값을 조정하는 내용을 다루었는데, 시간이 많이 걸리고 노동집약적이었습니다. 지금까지 모든 작업을 실행하는 클리핑 임계값=0.1은 없었고 성능도 너무 좋습니다.)

위의 요약은 제가 논문을 다 읽은 순간입니다. 제가 알기로는 괄호 안의 내용은 이 논문의 내용이 아니라 이전에 여러 번 읽은 내용에서 얻은 인상입니다. 이는 장기간의 독서 축적과 신속하게 연관시키고 비교할 수 있는 높은 수준의 일반화 능력에 달려 있습니다.

실제로 많은 학생들이 글 하나의 내용만 볼 수 있고, 전체 분야의 지식 포인트와 네트워크를 형성하거나 연관을 맺을 수 없기 때문에 글 쓰기를 시작하기가 어렵습니다. 한편, 막 시작하는 학생들은 충분히 읽지 못하고 아직 충분한 지식 포인트를 습득하지 못했습니다. 특히 오랫동안 교사로부터 프로젝트를 받아왔고 독립적으로 제안하지 않는 학생들의 경우에는 더욱 그렇습니다. 한편, 읽는 양은 충분하지만 간헐적으로 요약되지 않아 정보가 지식으로 응축되지 않거나 지식이 연결되지 않는 경우가 있다.

여기 DP 딥러닝에 대한 배경 지식이 있습니다. 지금은 DP의 정의를 건너뛰고 읽기에 영향을 미치지 않을 것입니다.

알고리즘 관점에서 소위 DP 딥 러닝은 실제로 두 가지 추가 단계, 즉 샘플당 그래디언트 클리핑과 가우스 노이즈 추가를 수행하는 것을 의미합니다. 즉, 이 두 단계에 따라 그래디언트를 처리하는 한( 그라디언트를 처리한 후 프라이빗 그라디언트라고 함) SGD/Adam을 포함하여 원하는 대로 최적화 프로그램을 사용할 수 있습니다.

최종 알고리즘이 얼마나 비공개적인지에 대해서는 개인정보 회계 이론이라는 또 다른 하위 분야의 문제입니다. 이 분야는 상대적으로 성숙하고 강력한 이론적 기반이 필요합니다. 이 기사에서는 최적화에 중점을 두므로 여기서는 언급하지 않겠습니다.

내가 처음부터 최고의 에세이를 쓴 방법

g_i는 데이터 포인트의 기울기(샘플당 기울기)이고, R은 클리핑 임계값, 시그마는 잡음 승수입니다.

Clip은 일반 그래디언트 클리핑과 마찬가지로 클리핑 기능이라고 합니다. 그래디언트가 R보다 길면 R로 클리핑되고, R보다 작으면 움직이지 않습니다.

예를 들어 SGD의 DP 버전은 현재 Abadi의 클리핑이라고도 알려진 프라이버시 딥 러닝(Abadi, Martin, et al. "Deep learning with Differential Privacy.")의 선구적인 작업에서 클리핑 기능을 사용하는 모든 논문에 사용되고 있습니다. : 그림.

그러나 이것은 완전히 불필요합니다. 첫 번째 원칙에 따라 개인 정보 보호 회계 이론에서 시작하면 실제로 클리핑 함수는 Clip(g_i)*g_i의 계수가 R보다 작거나 같다는 점만 충족하면 됩니다. 즉 아바디의 클리핑은 이 조건을 만족하는 하나의 함수일 뿐이지 결코 유일한 함수는 아니다.

2. 진입점

글에는 빛나는 점이 많지만, 모두 내가 사용할 수 있는 것은 아닙니다. 나의 필요와 전문성에 따라 가장 큰 기여가 무엇인지 판단해야 합니다.

이 기사의 처음 두 기고문은 실제로 매우 경험적이어서 자세히 살펴보기가 어렵습니다. 마지막 기여는 매우 흥미롭습니다. 하이퍼파라미터에 대한 제거 연구를 주의 깊게 살펴본 결과 원저자가 찾지 못한 점을 발견했습니다. 즉, 클리핑 임계값이 충분히 작을 때 실제로는 클리핑 임계값(즉, 클리핑 표준 C)이 발생합니다. , 위 수식에서 R은 변수임)에는 아무런 영향이 없습니다.

내가 처음부터 최고의 에세이를 쓴 방법

세로 방향으로 C=0.1, 0.4, 1.6은 DP-Adam과 차이가 없습니다[Xuechen et al.

이것이 나의 관심을 불러일으켰고 그 뒤에는 어떤 원칙이 있을 것이라고 느꼈습니다. 그래서 나는 그들이 그 이유를 보곤 했던 DP-Adam을 직접 작성했습니다. 사실 매우 간단합니다.

내가 처음부터 최고의 에세이를 쓴 방법

R이 충분히 작다면 클리핑은 실제로 정규화와 동일합니다! 간단히 Private Gradient(1.1)에 대입하면 R은 Clipping 부분과 Noising 부분에서 각각 추출될 수 있습니다.

내가 처음부터 최고의 에세이를 쓴 방법

그리고 Adam의 형태는 R이 Gradient와 Adaptive Step Size에 동시에 나타나도록 하며, 분자와 분모 오프셋이 적용되면 R은 사라지고 아이디어는 그대로 유지됩니다!

내가 처음부터 최고의 에세이를 쓴 방법

m과 v는 모두 기울기에 따라 달라지며 이를 전용 기울기로 바꾸면 DP-AdamW가 됩니다.

이러한 간단한 대체만으로도 내 첫 번째 정리가 증명됩니다. DP-AdamW에서는 충분히 작은 클리핑 임계값이 서로 동일하며 매개변수 조정이 필요하지 않습니다.

이것은 의심할 여지없이 매우 간결하고 흥미로운 관찰이지만 충분히 이해가 되지 않으므로 이 관찰이 실제로 어떤 용도로 사용되는지 생각해 볼 필요가 있습니다.

실제로 이는 DP 훈련이 매개변수 조정 작업을 몇 배나 줄인다는 것을 의미합니다. 학습률과 R이 각각 5개 값으로 조정된다고 가정하면(위 그림 참조), 25개 최적의 하이퍼파라미터를 찾으려면 조합을 테스트해야 합니다. 이제 5가지 가능성에서 학습률만 조정하면 되며 매개변수 조정 효율성이 여러 번 향상되었습니다. 이는 업계에서 매우 중요한 문제점입니다.

의도는 충분히 높고, 수학은 충분히 간결하며, 좋은 아이디어가 구체화되기 시작했습니다.

3. 단순 확장

Adam/AdamW에만 해당된다면 이 작업의 한계는 여전히 너무 커서 AdamW 및 AdaGrad와 같은 다른 적응형 최적화 프로그램으로 빠르게 확장했습니다. 실제로 모든 적응형 최적화 프로그램에 대해 클리핑 임계값이 상쇄되므로 매개변수를 조정할 필요가 없으므로 정리의 풍부함이 크게 증가한다는 것이 입증될 수 있습니다.

여기에는 또 다른 흥미로운 작은 세부 사항이 있습니다. 우리 모두 알고 있듯이, AdamW는 분리된 체중 감소를 사용합니다. ICLR

내가 처음부터 최고의 에세이를 쓴 방법

Adam에는 두 가지 방법으로 체중 감소를 추가합니다.

이 차이점은 DP 옵티마이저에도 존재합니다. Adam의 경우에도 마찬가지입니다. 분리된 가중치 감소를 사용하는 경우 R 스케일링은 가중치 감소 크기에 영향을 미치지 않습니다. 그러나 일반 가중치 감소를 사용하는 경우 R을 두 배로 늘리는 것은 가중치 감소를 두 배로 줄이는 것과 같습니다.

넷째.

내가 적응형 최적화 프로그램을 계속 강조한다는 사실을 똑똑한 학생들이 발견했을 수도 있습니다. 제가 SGD에 대해 이야기하지 않는 이유는 무엇입니까? 그러다가 CV에 DP-SGD를 사용한다는 기사를 올리고 Ablation Study를 했는데, Adam에서 발견한 규칙과 완전히 달라서 비스듬한 인상을 받았습니다

내가 처음부터 최고의 에세이를 쓴 방법

DP-SGD의 경우 R이 충분히 작은 경우 lr을 10배 늘리는 것은 R을 10배 늘리는 것과 같습니다[https://arxiv.org/abs/2201.12328].

이 기사를 보고 매우 기뻤습니다. Small Clipping Threshold의 효과를 입증한 또 다른 논문이었기 때문입니다.

과학계에서는 연속된 우연의 뒤에 숨겨진 규칙이 있는 경우가 많습니다.

간단히 이를 대체하면 SGD가 Adam(1.3)보다 분석하기 쉽다는 것을 알 수 있습니다.

내가 처음부터 최고의 에세이를 쓴 방법

분명히 R을 다시 제안하고 학습률과 결합하여 이론적으로 Google의 관찰을 증명할 수 있습니다.

“구체적으로 클리핑 노름이 k배 줄어들면 학습률도 k배 높여야 유사한 정확도를 유지할 수 있습니다.”

구글이 현상만 보고 이론 수준까지 올라가지 못한 점이 아쉽습니다. . 여기에도 우연이 있는데, 위 그림에서 두 스케일의 절제 연구를 동시에 그렸다는 것인데, 왼쪽 스케일만 대각선을 보면 알 수 있다.

자동이 없기 때문에 step size에 적응하기 위해 SGD는 Adam처럼 R을 무시하지 않고 R을 학습률의 일부로 취급하므로 별도로 조정할 필요는 없습니다. 매개변수가 조정되면 함께 표시됩니다.

그런 다음 SGD 이론을 모멘텀으로 확장하여 Pytorch에서 지원하는 모든 옵티마이저를 분석했습니다.

5. 직관에서 엄밀함으로

혁신적인 점이 있지만, 엄밀히 말하면 아바디의 클리핑은 대략적인 정규화에 불과하고 등화될 수 없기 때문에 수렴을 결론적으로 분석할 수 없습니다.

도라에몽 아이언맨 군단의 원리에 따라 6년간 전 분야에서 사용하던 아바디 클리핑을 대체하는 새로운 샘플별 그래디언트 클리핑 기능으로 정규화를 직접 명명한 것이 저의 두 번째 혁신 포인트입니다. .

이전 증명 이후 새 클리핑에는 R이 엄격하게 필요하지 않으므로 자동 클리핑(AUTO-V, 바닐라의 경우 V)이라고 합니다.

아바디의 클리핑과는 형태가 다르기 때문에 정확도도 달라지고, 저의 클리핑에는 단점이 있을 수 있습니다.

그래서 새로운 방법을 테스트하려면 코드를 작성해야 하는데 코드 한 줄만 변경하면 됩니다(결국 그림일 뿐입니다).

사실 DP별 그라디언트 클리핑 방향에는 크게 3가지 클리핑 기능이 있는데, 아바디의 클리핑 외에 제가 제안한 두 가지는 글로벌 클리핑이고, 다른 하나는 이 자동 클리핑입니다. 이전 작업에서는 이미 다양한 인기 라이브러리에서 클리핑을 변경하는 방법을 알고 있었으며 수정 방법은 기사 마지막 부분에 첨부했습니다.

테스트 후 Stanford 기사에서 GPT2의 전체 교육 프로세스 중에 모든 반복과 모든 샘플별 그라데이션이 잘리는 것을 발견했습니다. 즉, 적어도 이 실험에서는 Abadi의 클리핑은 자동 클리핑과 완전히 동일합니다. 이후의 실험은 SOTA에 패했지만 이것은 나의 새로운 방법이 충분한 가치를 갖고 있음을 보여주었습니다. 즉, 클리핑 임계값을 조정할 필요가 없는 클리핑 함수이며 때로는 정확도가 희생되지 않습니다.

6. 추상적 사고로 돌아가기

Stanford의 기사에는 두 가지 주요 유형의 언어 모델 실험이 있습니다. 하나는 GPT2가 모델인 생성 작업이고 다른 하나는 RoBERTa가 모델인 분류 작업입니다. 자동 클리핑은 생성 작업에 대한 Abadi의 클리핑과 동일하지만 분류 작업의 정확도는 항상 몇 포인트 더 나쁩니다.

저의 학업 습관으로 인해 이번에는 데이터 세트를 변경한 다음 주요 실험을 선택하여 게시하지 않고 트릭(예: 데이터 향상 및 마법 모델 수정)을 추가하지 않겠습니다. 완전히 공정한 비교를 통해 샘플별 그래디언트 클리핑만 비교하고 가능한 최고의 무습윤 효과를 얻을 수 있기를 바랍니다.

실제로 협력자들과의 논의에서 우리는 순수 정규화와 Abadi의 클리핑이 그래디언트 크기 정보를 완전히 버린다는 것을 발견했습니다. 즉, 자동 클리핑의 경우 원래 그래디언트가 아무리 크더라도 클리핑은 항상 동일합니다. R은 이 Large를 좋아하지만 Abadi는 R보다 작은 그래디언트에 대한 크기 정보를 유지합니다.

이 아이디어를 바탕으로 AUTO-S 클리핑(S는 stable)이라는 작지만 매우 영리한 변화를 만들었습니다.

내가 처음부터 최고의 에세이를 쓴 방법

R과 학습률의 융합은

내가 처음부터 최고의 에세이를 쓴 방법

간단해집니다. 그림을 보면 이 작은(보통 0.01로 설정되지만 다른 양수로 설정할 수도 있고 매우 견고함) 그라데이션 크기 정보를 유지할 수 있음을 알 수 있습니다.

내가 처음부터 최고의 에세이를 쓴 방법

이 알고리즘을 기반으로 한 줄만 변경하고 Stanford 코드를 다시 실행하면 6개의 NLP 데이터 세트의 SOTA를 얻을 수 있습니다.

내가 처음부터 최고의 에세이를 쓴 방법

AUTO-S는 E2E 생성 작업은 물론 SST2/MNLI/QNLI/QQP 분류 작업에서도 다른 모든 클리핑 기능을 능가합니다.

7. 일반 알고리즘을 만들어 보세요

스탠포드 기사의 한 가지 한계는 NLP에만 초점을 맞추고 있다는 점인데, 공교롭게도 Google이 ImageNet의 DP SOTA를 파괴한 지 두 달 후, Google 자회사 DeepMind가 이력서에서 DP가 직접 빛을 발하는 기사를 발표했습니다. ImageNet 정확도가 48%에서 84%로 증가합니다!

내가 처음부터 최고의 에세이를 쓴 방법

문서 주소: https://arxiv.org/abs/2204.13650

이 기사에서는 부록에서 이를 다루기 전까지 먼저 최적화 프로그램과 클리핑 임계값의 선택을 살펴보았습니다. 사진:

내가 처음부터 최고의 에세이를 쓴 방법

ImageNet의 DP-SGD SOTA에서도 클리핑 임계값이 충분히 작아야 합니다.

여전히 작은 클리핑 임계값이 가장 잘 작동합니다! 자동 클리핑을 지원하는 3개의 고품질 기사를 통해 이미 강한 의욕이 생겼고, 내 작업이 훌륭해질 것이라는 확신이 점점 더 커졌습니다.

공교롭게도 이 DeepMind 기사는 이론이 없는 순수한 실험이기도 하며, 이로 인해 그들은 이론적으로 R이 필요하지 않을 수도 있다는 것을 거의 깨닫게 되었습니다. 사실 그들은 내 생각과 정말 가깝고 R이 가능하다는 사실도 발견했습니다. 추출되어 학습률과 통합됩니다(관심 있는 학생들은 공식 (2)와 (3)을 볼 수 있습니다). 그런데 아바디의 클리핑 관성이 너무 컸다... 규칙을 알아냈음에도 더 이상 나아가지 않았다.

내가 처음부터 최고의 에세이를 쓴 방법

DeepMind는 또한 작은 클리핑 임계값이 가장 잘 작동한다는 사실을 발견했지만 그 이유를 이해하지 못했습니다.

이 새로운 작업에서 영감을 받아 저는 NLP에 한 가지 방법 세트를 사용하고 CV에 다른 방법 세트를 사용하는 대신 모든 DP 연구자가 내 알고리즘을 사용할 수 있도록 CV 실험을 시작했습니다.

좋은 알고리즘은 보편적이고 사용하기 쉬워야 합니다. 자동 클리핑도 CV 데이터 세트에서 SOTA를 달성할 수 있다는 사실도 입증되었습니다.

내가 처음부터 최고의 에세이를 쓴 방법

8. 이론은 뼈이고 실험은 날개

위의 논문들을 다 보면 SOTA가 대폭 개선되고 공학적 효과도 가득 차 있지만 이론은 완전 백지입니다.

모든 실험을 마쳤을 때 이 작업의 기여도는 최고 컨퍼런스의 요구 사항을 초과했습니다. 경험상 작은 클리핑 임계값으로 인해 발생하는 DP-SGD 및 DP-Adam의 매개변수 영향을 크게 단순화했습니다. 계산 효율성, 개인정보 보호를 희생하지 않고 매개변수 조정 없이 제안되었으며, 작은 γ는 Abadi의 클리핑 및 정규화로 인한 그래디언트 크기 정보의 손상을 복구하여 충분한 NLP 및 CV 실험을 통해 SOTA 정확도를 달성했습니다.

아직 만족스럽지 않아요. 이론적 지원이 없는 옵티마이저는 여전히 딥러닝에 실질적인 기여를 할 수 없습니다. 매년 수십 개의 새로운 옵티마이저가 제안되고, 2년차에는 모두 폐기됩니다. Pytorch에서 공식적으로 지원하고 실제로 업계에서 사용하는 것은 아직 소수에 불과합니다.

이 때문에 저와 공동 작업자들은 자동 DP-SGD 수렴 분석을 수행하는 데 2개월을 더 소비했습니다. 과정은 어려웠지만 최종 증명은 극도로 단순화되었습니다. 결론도 매우 간단합니다. 배치 크기, 학습률, 모델 크기, 표본 크기 및 기타 변수가 수렴에 미치는 영향이 정량적으로 표현되며 이는 알려진 모든 DP 훈련 동작과 일치합니다.

특히 DP-SGD는 표준 SGD보다 느리게 수렴하지만 반복이 무한대에 가까워지는 경우 수렴 속도는 수십배라는 것을 증명했습니다. 이는 개인 정보 보호 계산에 대한 자신감을 제공합니다. DP 모델은 비록 늦었지만 수렴됩니다.

9. 교통사고...

드디어 7개월간 쓴 글이 의외로 아직 끝나지 않았습니다. NeurIPS는 5월에 논문을 제출했고, 6월 14일에 내부 수정이 완료되어 arXiv에 공개되었습니다. 그 결과, 6월 27일에 Microsoft Research Asia(MSRA)가 우리와 충돌하는 기사를 게재한 것을 보았습니다. 자동 클리핑과 똑같습니다:

내가 처음부터 최고의 에세이를 쓴 방법

저희 AUTO-S와 똑같습니다.

잘 살펴보면 수렴의 증명조차 거의 같습니다. 그리고 우리 두 그룹에는 교차점이 없습니다. 태평양 건너편에서 우연이 탄생했다고 할 수 있습니다.

두 기사의 차이점에 대해 조금 이야기해 보겠습니다. 다른 기사는 좀 더 이론적입니다. 예를 들어 Abadi DP-SGD의 수렴을 추가로 분석합니다(저는 DP-NSGD인 자동 클리핑만 증명했습니다. 그들의 기사, 아마도 DP-SGD를 조정하는 방법을 모르겠습니다. 사용된 가정도 다소 다르며 우리의 실험은 점점 더 커지고(12개 이상의 데이터 세트) Abadi의 클리핑과 정규화 간의 동등 관계가 있습니다. 정리 1과 2와 같이 더 명시적으로 확립되어 매개변수 조정 없이 R을 사용할 수 있는 이유를 설명합니다.

동시에 작업을 하고 있기 때문에 서로 동의하고 보완할 수 있는 사람들이 있어 이 알고리즘을 공동으로 홍보하여 ​​커뮤니티 전체가 이 결과를 믿고 혜택을 받을 수 있다는 것이 매우 기쁩니다. 최대한 빨리. 물론 이기적으로 다음 글이 가속될 것이라는 점을 상기시키기도 합니다!

10. 요약

이 글의 창작 과정을 되돌아보면, 출발점부터 기본적인 기술이 전제되어야 하고, 또 다른 중요한 전제 조건은 매개변수 조정의 페인 포인트에 대해 항상 생각해 왔다는 것입니다. 오랜 가뭄이 이어졌기 때문에 올바른 글을 읽어보시면 꿀을 찾는데 도움이 될 수 있습니다. 그 과정에서 핵심은 관찰을 수학적으로 이론화하는 습관에 있습니다. 이 작업에서는 코드를 구현하는 능력이 가장 중요하지 않습니다. 나는 또 다른 하드 코어 코딩 작업에 초점을 맞춘 또 다른 칼럼을 쓸 것입니다. 최종 융합 분석도 나의 협력자와 나의 인내에 달려 있습니다. 다행히도 맛있는 식사에 늦는 것을 두려워하지 않으니 계속 가세요!

저자 소개

Bu Zhiqi는 케임브리지 대학교에서 학사 및 박사 학위를 취득했으며 현재 Amazon AWS AI의 수석 연구 과학자입니다. 최적화 알고리즘과 대규모 컴퓨팅에 중점을 둔 차등 개인 정보 보호 및 딥 러닝.

위 내용은 내가 처음부터 최고의 에세이를 쓴 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿